0

嗨,我正试图把它变成一个教义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)); 这样的东西 现在我只想要至少分配了 id 1 和 2 的标签的帖子。我尝试加入的结果要么返回两个帖子,要么都不返回。

4

1 回答 1

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
于 2013-07-02T02:08:23.447 回答