我有一个post
关系以及tag_system_one
和tag_system_two
。
post
和tag_system_one
到tag_system_one_post
之间存在多对多关系。
post
和tag_system_two
到tag_system_two_post
之间存在多对多关系。
我想要一个用于多标签搜索的SQL查询。
只有一个标签系统时,查询非常简单:
SELECT post.*
FROM post
JOIN tag_system_one_post ON post.id = tag_system_one_post.fk_post
JOIN tag_system_one ON tag_system_one_post.fk_tag_system_one = tag_system_one.id
WHERE tag_system_one.id IN (500, 533)
GROUP BY post.id
HAVING COUNT(*) = 2;
在此示例中,它检索带有两个标签500
和533
(相交)的所有帖子。
Posts that only have tag `500` but not `533` will not be shown.
因为我正在使用COUNT(*) = 2
,所以我能够执行上述声明。但这在我引入另一个标记系统(tag_system_two
)时不起作用。
有没有子查询的方法吗?
答案 0 :(得分:0)
考虑了一会后,我认为解决方法是:
HAVING COUNT(*) =
no. of items selected in tagging_system_one
MULTIPLIED BY
no. of items selected in tagging_system_two