初学者在这里!我正在尝试编写一个查询,它将从“结果”表中选择3个评论最多的结果,评论存储在单独的“评论”表中。
results
- id
- title
- body
- etc
- etc
comments
- id
- result_id
- user_id
- timestamp
- comment
所以我需要从结果中选择所有,并按results.id和comments.result_id之间的匹配数量排序,但我真的不知道从哪里开始!
非常感谢您的帮助,非常感谢!
答案 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"?