2011-05-17 75 views
1

我有一個用戶表和意見表,我想從用戶的選擇,通過的意見頂級用戶(評論)

數有從意見表,並命令他們意見最大的量的頂級用戶只需論壇意見應計入(類型可以是論壇,圖片,新聞等)

表結構

用戶

id | username | password 

評論

id | text | type | author_id 
+0

您正在使用哪些DBMS?定義*最高用戶*/*最大金額*。 – 2011-05-17 21:48:11

+0

你試過了什麼? – stecb 2011-05-17 21:48:15

回答

1
SELECT users.id, users.name, COUNT(comments.id) AS cnt 
FROM users 
LEFT JOIN comments ON users.id = comments.author_id 
WHERE type IN ('forum', 'picture', 'news', 'etc') 
GROUP BY users.id 
ORDER BY cnt DESC 
LIMIT 10 

獲得10最豐富的評論員在評論類型是「形」,「圖像」,「新聞」,或「等」。

+1

哦,它已經晚了......而我很困,但它肯定應該是GROUP BY users.id? – 2011-05-17 22:10:15

+0

不需要做任何左連接 – Ascherer 2011-05-17 22:13:13

+0

doh。對。我將修復分組。 LEFT JOIN處理少於10個評論者的情況。內連接只會返回與其評論者相同數量的行。 – 2011-05-18 02:00:55

5
SELECT 
    u.id,u.username,u.password ,count(c.id) as total 
FROM 
    users u 
JOIN comments c on c.author_id = u.id 
GROUP BY u.id 
ORDER BY total DESC; 

這應該做的伎倆,試圖讓我們知道它是如何摸索出適合您

UPDATE 有關如何做到這一點的細節,你會inlove具有落入this article

更新:新鏈接,舊的破損Databases

+0

但我如何在php過程中使用這個 – Dave 2011-05-17 21:52:08

+0

更新我假設你正在使用mysql – Ibu 2011-05-17 21:55:20

+1

+1爲一個好的查詢。 – Sid 2011-05-17 21:56:41

1

在PostgreSQL 8.1上測試:

select users.id, count(comments.author_id) 
from users, comments 
where users.id = comments.author_id 
group by users.id 
order by 2 desc