2012-07-24 68 views
1

初学者在这里!我试图编写一个查询,它将从“结果”表中选择3条评论最多的结果,评论存储在一个单独的“评论”表中。MYSQL加入帮助。根据单独评论表中的评论数获取结果?

results 
- id 
- title  
- body 
- etc 
- etc 

comments 
- id 
- result_id 
- user_id 
- timestamp 
- comment 

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

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

回答

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 
+0

发布答案时请使用正确的连接语法。 (用“join”替换from中的“,”并将“where”替换为“on”。) – 2012-07-24 15:39:42

+0

@GordonLinoff感谢您的提示。想想它太快了:-) – Kayser 2012-07-24 15:45:59

+0

非常感谢,救生员! – 2012-07-24 21:01:23

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; 
+0

你可能想包括SELECT子句中的results_id。 – 2012-07-24 15:33:23

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"?