2012-07-12 38 views
0

我有两个表中包含代码:
表:应收
id | username | email | registered
1 | player1 | [email protected]| 2012-05-03
2 | goodman | [email protected]| 2012-06-03
3 | goodbat | [email protected]| 2012-06-05

表:字符
guid | account | name | rank
213 | 1 | fres | 2
214 | 2 | sdg2 | 3
215 | 1 | fgax | 4
216 | 3 | zFvx | 8
217 | 3 | zsvx | 2 ...
MySQL的选择每首先行中的两个表查询

我想使用一个查询显示最高级别的帐户。

输出(与他们的最高级别人物表演账户)
username : player1 | [email protected] | char: fgax(4)
username : goodman | [email protected] | char: sdg2(3)
username : goodbat | [email protected] | char: zFvx(8)
...

我的查询:SELECT username,email,id FROM accounts

+1

你应该把这个问题有点更具描述性的,如命名你的表。是table1的帐户表和排名值是什么?等级值是我们可以比较的整数值吗? – Alex 2012-07-12 17:41:44

+0

您的示例输出与您的数据不符。 – RedFilter 2012-07-12 17:42:22

+0

我想修复缺失的细节,但给错误:(​​您的文章似乎包含代码没有正确格式化的代码。) – Root125 2012-07-12 17:56:23

回答

0

你可以试试这个:

SELECT a.username, a.email, c.name 
FROM Accounts a, characters c 
WHERE a.id=c.account 
ORDER BY MAX(c.rank) DESC 
0
SELECT a.username, a.email, a.id, c.name 
FROM accounts a 
JOIN chars c ON a.id = c.account 
ORDER BY a.rank DESC 
0

试试这个::

SELECT 
a.username as userName, 
a.email as email, 
a.id as id, 
c.name as name 

FROM accounts a 
INNER JOIN chars c ON (a.id = c.accoun)t 
ORDER BY a.rank DESC 
0

你需要的是一个表连接。什么表连接做的是,他们查询2表,在你的情况下表1表2。这里是查询,接下来是解释。

SELECT `t1`.`username`, `t1`.`email`, `t2`.account 
FROM `Table1` `t1`, `table2` `t2` 
WHERE `t1`.`id` = `t2`.`account` ORDER BY `rank` DESC 
LIMIT 0,3 

LINE 1:SELECT ... t1usernamet1意味着用户名栏,等等......而t1t2符号来源于...

LINE 2:从... Table1t1意味着我从查询表1,并分配它是一个别名或指针t1。这与我们如何将表2分配为t2的方式相同。

LINE 3:WHERE ... 这意味着您可以基于共同列加入表格。在这种情况下,无论是表1表2共享同一组值 - ID为表1,占表2。因此,您使用了上述行。

ORDER BY ... 这意味着您想要根据特定条件安排记录,在这种情况下排名。有两个方向 - ASC表示升序(最小的顶部)或DESC,表示降序。

LINE 4:LIMIT 0,3 这意味着我想获得第一行(0)和只有3条记录。因此,限制0,3

这是我可以给的最全面的解释。

0

试试这个。

SELECT 
t1.username as userName, 
t1.email as email, 
concat(t2.name, '(', t2.rank, ')') as name 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.id = t2.account 
ORDER BY t2.rank DESC