请原谅我,如果之前有人询问,我很难想到好的搜索查询。
可以说我有2个模型,帖子和标签。帖子通过枢轴模型PostTags有很多标签。
我想要做的是组合具有完全相同的标签组合的帖子。我知道如何对具有任何相同标签的帖子进行分组,但我在这方面遇到了困难。
例如,如果我有一个ID为1的帖子,并且帖子有两个标签 - 一个ID为5,另一个ID为7.我将有2个PostTag,一个post_id为1,以及tag_id为5,然后是另一个post_id为1且tag_id为7.我有另一个id为3的帖子,它还有2个PostTag - 一个post_id为3,tag_id为5,另一个为post_id为3,tag_id为7.我想将这些组合在一起,这样我就可以计算出这些标签中有多少个帖子,而没有其他帖子。
谢谢,我希望我能够正确解释这一点。
我想你可以在嵌套查询中做这样的事情:
SELECT tag_ids,
string_agg(post_id, ',')
FROM (
SELECT post_id,
string_agg(tag_id, ',') as tag_ids
FROM post_tags
GROUP BY post_id)
GROUP BY tag_ids;
说明:
首先在内部查询中,您连接由post_id分组的tag_ids,这样您就可以获得每个帖子的标签组合。
然后在外部查询中,通过tag_ids的组合连接post_ids,这样就可以获得每个标记组合的所有post_id。
这可能还不是结束,您可以进一步处理post id,或修改查询以获取所需的任何数据。
希望这有帮助!
希望模型关系设置正确。
# Post Model
class Post
has_many :post_tags
has_many :tags, through: :post_tags
end
# Fetch Tags to match with posts collection
tag_ids = []
# Query to fetch posts
Post.joins(:tags).where(tags: { id: tag_ids }).
group("posts.id").having("count(posts.id) >= ?", tag_ids.size)
=
而不是>=
快乐黑客!