English 中文(简体)
按照对象间关联数量排序的查询写法
原标题:
  • 时间:2009-02-13 00:59:15
  •  标签:

现在是时候在我的类似博客的网络应用上实施排序了。除了按照创建日期浏览,我希望用户也能够按回复数量进行排序。

考虑到我有两个表,即blog_posts和replies,并且replies有一个名为blog_post_id的字段(一个外键指向其所回复的blog_post),我如何编写这个查询?

选择回复最多的30篇博客文章,按照每篇博客文章的回复数从高到低排序。

我也想对此进行分页。获取下一个30个、下一个30个等是否很难?

我的感觉是使用SQL并不太难,只是我不知道该怎么做(还在学习中)。

最佳回答

这应该有用:

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子句来启用分页。

问题回答

我在本地没有一份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 )

不确定按字段排序是否适用于子查询,但值得一试。

祝你好运!

Ian (伊恩)

类似的东西:

select
    replies = (select count(*) from replies where blog_post_id = b.id),
    id,
    ...
from blog_post b
order by 1 desc
limit 30;




相关问题
热门标签