2012-07-12 41 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