我希望按照相关帖子的数量显示所有用户的列表。
user has_many :posts
posts belong_to :user
来自另一个SO问题的查询得到了我正确排序的结果,但它没有返回因内部联接而没有任何帖子的任何用户。
User.joins(:posts).group('posts.user_id').order('count(posts.user_id) desc')
有没有办法让所有用户恢复关系,最高帖子优先和零(0)帖子持续?我尝试了以下但我收回了大量user_id: nil, first_name: nil, etc
个用户条目。似乎以下查询中有0个帖子的用户作为关系元素返回,所有值都设置为nil
?
User.joins('FULL OUTER JOIN posts ON posts.user_id = users.id').group('posts.user_id', 'users.id').order('count(posts.user_id) DESC')
答案 0 :(得分:1)
我建议使用LEFT
表中的users
联接。这将确保如果您碰巧posts
未与任何users
相关联,则无法将其包括在内。但是你仍然可以找回那些没有users
的{{1}}。
然后,您只想按posts
进行分组,以确保每users.id
行返回一行。
最后,我们要计算User
行的不同出现次数。这将确保我们保持正确的计数,即使我们开始加入其他表格。
你应该能够使用这样的东西:
Post
如果您想显示每个User.joins("LEFT JOIN posts ON users.id = posts.user_id").group("users.id").order("COUNT(DISTINCT posts.id) DESC")
的{{1}}计数,您可以在选择中包含以下内容:
posts