MySQL从每行第一个查询中选择两个表

时间:2012-07-12 17:36:52

标签: php mysql

我有两张表格,代码如下:

表:帐户

id |    username    |   email   |   registered  
1   |   player1     | 123@asd.ad|   2012-05-03  
2   |   goodman     | 1345@bs.ad|   2012-06-03  
3 | goodbat | asdh@asd.d| 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 
...

我想只用一个查询来显示排名最高的帐户。

输出(显示排名最高的帐户)

username : player1 | 123@asd.ad | char: fgax(4)  
username : goodman | 1345@bs.ad | char: sdg2(3)  
username : goodbat | 134s@bs.ad | char: zFvx(8)  
...

我的查询:

SELECT username,email,id FROM accounts

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

您需要的是表连接。表连接的作用是它们查询2个表,在您的情况下 Table1 table2 。这是查询,然后是解释。

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

第1行:选择......     t1username表示来自t1。的用户名列,依此类推......而t1t2符号来自......

第2行:来自...... Table1 t1表示我从 Table1 查询,并为其分配了别名或指针t1。我们将 table2 分配给t2的方式也是如此。

第3行:哪里...... 这意味着您基于公共列加入表。在这种情况下, Table1 table2 共享相同的值集 - Table1 的ID和 table2 的帐户。因此,您使用了上述行。

订购... 这意味着您希望根据特定条件排列记录,在本例中为排名。有两个方向 - ASC表示升序(最小的顶部)或DESC表示降序。

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

这是我能给出的最全面的解释。

答案 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

答案 4 :(得分:0)

你可以试试这个:

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