是时候在类似博客的Web应用程序上实现排序了。除了按创建日期浏览之外,我还希望用户能够按回复数量进行排序。
鉴于我有两个表blog_posts和回复,并且回复有一个名为blog_post_id的字段(blog_post的外键是回复),我该如何编写此查询?
“选择回复最多的30篇博文,按降序排列每篇博文的回复数量排序。”
我也想对此进行分页。难以获得下一个30,接下来的30等等吗?
我的感觉是这对SQL来说并不难,我只是不知道该怎么做(还在学习)。
答案 0 :(得分:5)
这应该可以解决问题:
SELECT blog_posts.*, count(replies.blog_post_id) as blog_replies
FROM blog_posts
LEFT JOIN replies ON replies.blog_post_id = blog_posts.id
GROUP BY blog_posts.id
ORDER BY blog_replies DESC
您可以在最后处理LIMIT和OFFSET子句以使分页工作。
答案 1 :(得分:1)
我没有本地的MySQL副本,我可以搞乱,但你可以做这样的事情:
SELECT
blog_post.id,
[other relevant fields from blog_post],
(SELECT COUNT(*) FROM replies WHERE blog_post_id = blog_post.id) 'replies'
FROM
blog_post
ORDER BY FIELD('replies')
不确定按字段排序是否适用于子查询,但值得一试。
祝你好运!伊恩
答案 2 :(得分:1)
类似的东西:
select
replies = (select count(*) from replies where blog_post_id = b.id),
id,
...
from blog_post b
order by 1 desc
limit 30;