gpt4 book ai didi

mysql - 按共同关联的数量排序,即使没有(rails)

转载 作者:行者123 更新时间:2023-11-29 12:12:12 28 4
gpt4 key购买 nike

我正在开发一个项目,该项目与此问题有非常相似的困境: Ordering by number of associations in common (Rails)

所述询问的询问者(Neon)写道,

BACKGROUND: I have Posts and Users, and both have many Communities.

OBJECTIVE: For any given User I'd like to return a collection of Posts, ordered by how many communities the post has in common with the user (posts with more communities in-common being higher up)

遗憾的是,该解决方案仅包含至少具有一个共同社区的帖子。我的困惑需要包括按公共(public)社区数量排序的所有帖子。

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

最佳答案

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

# 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 ) 相同。

关于mysql - 按共同关联的数量排序,即使没有(rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com