嗨,我正试图将其变成一个学说2,不幸的是,我现在已经在脑子里打结了。
我有3张桌子
post
id | unrelated stuff
post_has_tag
post_id | tag_id
1 1
1 2
2 2
tag
id | name
1 smth
2 smthelse
现在我想使用一些标签导航,有点像stackoverflow,这是我的问题适用的地方。如果所有ID都适用,我想从我的m2n表中只选择post_id。而且我在这里有点愚蠢,因为我的所有人都给了我既得托管也没有托付。
如果你能给我sql我会没事的,如果你能给我dql那就太棒了
E:澄清 总而言之:
我使用像$ object-> filterPostsByTag(array(1,2))的smth;现在我只想要至少分配id为1和2的标签的帖子。我对连接的尝试导致返回两个帖子或没有。
答案 0 :(得分:1)
如果您希望应用所有ID(可能是“标记”ID),则使用带有having
子句的聚合:
select pht.post_id
from post_has_tag pht
group by pht.post_id
having count(distinct pht.tag_id) = (select count(distinct t.tag_id) from tag t)
编辑:( OP修订后)
如果您只想要两个特定标签,则可以使用相同的想法:
如果您希望应用所有ID(可能是“标记”ID),则使用带有having
子句的聚合:
select pht.post_id
from post_has_tag pht
group by pht.post_id
having max(pht.tag_id = 1) > 0 and
max(pht.tag_id = 2) > 0
这将返回包含两个标记的所有帖子。如果你想要其他标签和:
select pht.post_id
from post_has_tag pht
group by pht.post_id
having max(pht.tag_id = 1) > 0 and
max((pht.tag_id <> 1) or (pht.tag_id <> 2)) = 0