1

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

results
 - id  
 - title    
 - body   
 - etc
 - etc

comments
 - id  
 - result_id
 - user_id
 - timestamp
 - comment

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

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

4

3 回答 3

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
于 2012-07-24T15:33:50.407 回答
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;
于 2012-07-24T15:31:13.823 回答
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 连接的描述,请查看“INNER JOIN”和“OUTER JOIN”有什么区别?

于 2012-07-24T15:41:46.003 回答