MYSQL加入帮助。根据单独评论表中的评论数量获得结果?

时间:2012-07-24 15:23:39

标签: php mysql sql codeigniter join

初学者在这里!我正在尝试编写一个查询,它将从“结果”表中选择3个评论最多的结果,评论存储在单独的“评论”表中。

results
 - id  
 - title    
 - body   
 - etc
 - etc

comments
 - id  
 - result_id
 - user_id
 - timestamp
 - comment

所以我需要从结果中选择所有,并按results.id和comments.result_id之间的匹配数量排序,但我真的不知道从哪里开始!

非常感谢您的帮助,非常感谢!

3 个答案:

答案 0 :(得分:2)

未经测试,但您可以做类似的事情

SELECT  r.id  ,r.title, r.body
FROM results r INNER JOIN (SELECT result_id, count(id) cnt FROM comments GROUP BY result_id) c
ON r.id = c.result_id
ORDER by c.cnt DESC

答案 1 :(得分:1)

也许尝试这样的事情:

SELECT COUNT(c.id) AS comment_count FROM results r
LEFT JOIN comments c ON r.id=c.result_id
GROUP BY result_id ORDER BY comment_count DESC LIMIT 3;

答案 2 :(得分:1)

以下内容应该有效:

SELECT r.id, COUNT(r.id) AS comment_count 
FROM results r 
INNER JOIN comments c 
ON results.id = c.result_id 
GROUP BY r.id 
ORDER BY comment_count DESC

您加入两个表,其中结果的id与comments表中引用的result_id相同。然后按result_id对行进行分组以删除重复项。 COUNT()函数汇总了分组的行并显示了它们的数量。

然后根据生成的评论计数对结果进行排序。

您也可以使用LEFT OUTER JOIN,然后您也会获得没有评论的所有结果。如果你想要或不这取决于你的需要。

有关SQL连接的说明,请查看What is the difference between "INNER JOIN" and "OUTER JOIN"?