2010-02-09 56 views
3

我想根據他們在輔助評論表中鏈接到多少個評論來排序用戶表,我認爲子選擇將是最好的工具,但我無法得到正確的語法。基於另一個表中的行數對mysql表進行排序

用戶表TESTDATA:

id | user_id 
1 | 1000 
2 | 1001 
3 | 1002 

評論表TESTDATA

id | link_id 
1 | 1002 
2 | 1000 
3 | 1002 
4 | 1000 
5 | 1002 
6 | 1001 
7 | 1000 
8 | 1002 

預計在第一表排序結果將是:

id | user_id 
3 | 1002 
1 | 1000 
2 | 1001 

在正確的方向的任何推送將是非常有幫助,謝謝! =)

回答

3

實際上,沒有必要使用子查詢。您可以使用由計數JOIN和ORDER:

SELECT 
    users.user_id, COUNT(comments.id) as total_messages 
FROM 
    users 
INNER JOIN 
    comments ON comments.link_id = users.id 
GROUP BY 
    user_id 
ORDER BY 
    COUNT(comments.id) DESC 
+1

這樣做的訣竅=)乾杯! – moodh 2010-02-09 21:42:53

2

只是一個連接,具有計數(),然後由計數(的順序)應該這樣做

select c.id, user_id, count(*) from user u, comments c where u.id = c.id group by id, user_id 

-ace

+0

乾杯!竅門=) – moodh 2010-02-09 21:44:46

0
SELECT u.id, u.user_id 
FROM users u 
JOIN (SELECT link_id, COUNT(*) cnt FROM comment GROUP BY link_id) c 
    ON (c.link_id = u.user_id) 
ORDER BY c.cnt DESC 

這將允許你從users添加其他列,而不必group by他們全部。

+0

最後它不需要子選擇,謝謝! =) – moodh 2010-02-09 21:46:10

1
SELECT 
    u.id, 
    u.user_id 
    COUNT(u.id) link_count 
FROM 
    Users u, 
    Comment c 
WHERE 
    c.link_id = u.user_id 
ORDER BY 
    link_count 
GROUP BY 
    u.id, 
    u.user_id 
+0

非常感謝,幾乎相同的解決方案=) – moodh 2010-02-09 21:43:37

相關問題