2010-03-17 97 views
1

我有users表和我有posts表,我想通過帖子 的人數從users選擇具有職位的大量上的用戶posts表,爲了他們,我可以通過array_count_values()通過使它我不能責令其 現在我想如果我通過左邊的一個MySQL查詢使它並加入會更加美好mysql的選擇頂級用戶問題

表結構

posts 

ID | auther_id

我想這

SELECT COUNT(1) cnt, u.user_id 
FROM users u 
LEFT JOIN posts p 
ON p.author_id=u.user_id 
GROUP BY u.user_id 
ORDER BY cnt DESC 
LIMIT 20 

它給了我這個 alt text http://img511.imageshack.us/img511/6707/31154352.gif 見箭頭 這是什麼 我只是有下USER_ID 5 2個職位,這是什麼第一排

+1

什麼你的表是什麼樣子? – Luiscencio 2010-03-17 13:59:54

回答

5

您需要使用GROUP BY u.user_id來聚合用戶的帖子,獲取COUNT值的帖子數和ORDER BY該數字,我ñ降序排列:

SELECT COUNT(1) cnt, u.user_id 
FROM users u 
LEFT JOIN posts p 
ON p.author_id=u.user_id 
GROUP BY u.user_id 
ORDER BY cnt DESC 
LIMIT 20 
+0

我認爲它有錯誤,它給我的用戶和帖子的數量 – 2010-03-17 14:12:14

+1

你必須包括帖子的數量來排序它。你不想要每個用戶的帖子數? – Andy 2010-03-17 14:14:44

+0

它給你的前20名用戶和他們的user_id – txwikinger 2010-03-17 14:16:15

2
SELECT u.user_id, COUNT(*) as post_count 
FROM users u 
INNER JOIN posts p 
USING (user_id) 
GROUP BY u.user_id 
ORDER BY post_count 
0

我用這個和它的工作 是真的

SELECT COUNT(1) cnt, a.auther_id 
FROM `posts` a 
LEFT JOIN users u ON a.auther_id = u.id 
GROUP BY a.auther_id 
ORDER BY cnt DESC 
LIMIT 20