如何按最近的帖子排序用户?
问题描述:
我有两个型号:User
和Post
其中有user_id
列(外键)和created_at
列。如何按最近的帖子排序用户?
我想按最近的帖子对用户进行排序。例如,如果:
user_id = 1, created 3 posts at: 17/05/2011, 19/05/2011, 21/05/2011
user_id = 2, created 1 post at: 22/05/2011
user_id = 3, created 2 posts at: 18/05/2011, 20/05/2011
的结果应该是:
user_id = 2
user_id = 1
user_id = 3
你将如何在Rails 3中实现这一目标?
答
应该是这样的:
Post.select(:user_id).group(:user_id).order("created_at DESC")
答
不知道的回报率的一部分,但你正在寻找到一个组由声明:
select user_id, max(created_at) as created_at
from posts
group by user_id
order by max(created_at) desc
答
如果您想通过最新帖子排序你可以依靠的事实,具有最大id
行是最新:
Post.select(:user_id).group(:user_id).order("MAX(id) DESC")
这样您可以使用id
列上的现有主键索引(并避免在created_at
列中添加新索引)。
这是错误的。例如,如果有3个用户,并且每个用户有一个帖子,User.joins(:posts).size'将是10,而不是3. – 2011-05-22 14:07:43
你是对的,对不起,寻找更好的东西;) – apneadiving 2011-05-22 14:13:01
这几乎是正确的。按照Denis的建议,在我将其改为'order(“max(created_at)DESC”)后,看起来好像有一个窍门。尽管如此,我仍然不确定没有'max'就能完成什么样的排序...... – 2011-05-22 14:47:48