2013-07-02 49 views
0

嗨,我试图将它变成一条doctrine2声明,不幸的是我现在已经在我的大脑中结了结。只有在所有Ids适用的情况下才能从ManyToMany中选择

我有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));现在我只想要分配至少带有ID 1和2的标签的帖子。我对连接的尝试导致要么返回这两个帖子,要么没有返回。

回答

1

如果你希望所有的IDS(大概是 “标签” IDS)提出申请,然后用聚集了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修订后)

如果你只是想两个特殊的标签,你可以使用同样的想法:

如果你希望所有的IDS(大概是“标签” IDS)提出申请,然后用聚集了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 
+0

尝试,检查背部 – Soundz

+0

没错的sql工作,现在是时候来教这doctrine2,他们的解析器是有点过,似乎 – Soundz

相关问题