编写按对象之间的关联数排序的查询

时间:2009-02-13 00:59:16

标签: sql mysql database

是时候在类似博客的Web应用程序上实现排序了。除了按创建日期浏览之外,我还希望用户能够按回复数量进行排序。

鉴于我有两个表blog_posts和回复,并且回复有一个名为blog_post_id的字段(blog_post的外键是回复),我该如何编写此查询?

“选择回复最多的30篇博文,按降序排列每篇博文的回复数量排序。”

我也想对此进行分页。难以获得下一个30,接下来的30等等吗?

我的感觉是这对SQL来说并不难,我只是不知道该怎么做(还在学习)。

3 个答案:

答案 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;