2011-05-17 77 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