我有两个模型:
用户和帖子(其中用户有_许多帖子)
我需要获取按最近发布帖子的用户排序的用户列表(包括列表顶部没有帖子的用户)。
到目前为止,我成功地做了这样的事情:
@users = User
.joins("LEFT OUTER JOIN posts ON users.id = posts.user_id")
.group("users.id")
.order("posts.created_at ASC")
.page(params[:page])
即将没有任何帖子的内容放在顶部,但其余的内容不会被排序。我怎样才能做到这一点?
最佳答案
我没有找到使用普通 activerecord 来完成此操作的方法。我的解决方案是:
@users = User.find_by_sql(%q{
SELECT users.*
FROM users
LEFT OUTER JOIN (
SELECT user_id, MAX(created_at) as max_created_at
FROM posts
GROUP BY user_id
) AS posts_sq
ON posts_sq.user_id = users.id
LEFT OUTER JOIN posts AS posts
ON posts.user_id = posts_sq.user_id
AND posts.created_at = posts_sq.max_created_at
WHERE deleted = false
ORDER BY posts.id IS NULL DESC, posts.created_at DESC
}).paginate(:page => params[:page])
关于mysql - 如何从 Rails 3 中的 LEFT OUTER JOIN 获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152423/