首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按共同关联数排序,即使没有(rails)

按共同关联数排序,即使没有(rails)
EN

Stack Overflow用户
提问于 2015-05-25 22:11:39
回答 1查看 94关注 0票数 0

我正在做一个和这个问题非常相似的项目:Ordering by number of associations in common (Rails)

赛义德(Neon)的提问者写道,

背景:--我有文章和用户,而且都有很多社区。 目标:对于任何给定的用户,我希望返回一组帖子,按帖子与用户共有多少个社区排序(更多公共社区的帖子更高)。

不幸的是,解决方案只包括至少有一个共同社区的帖子。我的困境需要包括所有由公共社区的数量排序的帖子。

扩展目标:结果必须是一个AREL对象,所有的帖子都是按公共社区的数量排序的,包括与用户有零个共同社区的帖子(更多的公共社区的帖子更高)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 00:55:06

如果您需要包含与用户相同的零社区的帖子,则可以使用LEFT JOIN。要清理在join条件下发送的参数,我们可以在类方法中定义这些参数,以便sanitize_sql_array方法可用:

代码语言:javascript
复制
# Post class
def self.community_counts(current_user)
  current_user.posts.joins(sanitize_sql_array(["LEFT JOIN community_posts ON community_posts.post_id = posts.id AND community_posts.community_id IN (?)", current_user.community_ids])).select("posts.*, COUNT(DISTINCT community_posts.community_id) AS community_count").group("posts.id").order("community_count DESC")
end

附加信息

一个INNER JOIN返回两个表之间的交集。LEFT JOIN返回左表中的所有行(在本例中为posts),并从右表(community_posts)返回匹配的行,但当没有匹配时(没有与用户社区匹配的社区的帖子),它也返回右侧的NULL。如需插图,请参阅this answer

据我所知,Rails没有提供任何生成LEFT JOIN的辅助方法。为此,我们必须写出SQL。

LEFT JOINLEFT OUTER JOIN (more info)相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30446662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档