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


MySQL Select From Two Table per Rows of First Query

我有两个表,代码如下:

表:账户

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

你可以试试这个:

SELECT a.username, a.email, c.name
FROM Accounts a, characters c
WHERE a.id=c.account
ORDER BY MAX(c.rank) DESC
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

试试这个::

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个表,在您的情况下是Table1table2。这是一个问题,后面会有解释。

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行:选择。。。CCD_ 1。CCD_ 2表示来自CCD_。,等等…而t1t2表示法来自。。。

第2行:从。。。Table1 t1表示我正在从Table1查询,并为其分配了别名或指针t1。这与我们将表2分配给t2的方式相同。

第3行:在哪里。。。这意味着您可以基于公共列联接表。在这种情况下,Table1table2共享同一组值-用于Table1id和用于table 2

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

第4行:极限0.3这意味着我想要得到第一行(0),并且只得到3条记录。因此,极限0.3

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

试试这个。

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