Mysql Symfony 2+;条令|和#xA0;实体必须具有所有标记

Mysql Symfony 2+;条令|和#xA0;实体必须具有所有标记,mysql,sql,symfony,doctrine,Mysql,Sql,Symfony,Doctrine,我用的是Symfony 2和学说。我有4个实体,CustomPage,Tag,CustomPageTag,Comment 每个CustomPage都可以有许多标记和许多注释。 我想选择一个具有特定标记的customPage(包含所有注释) 示例:我想选择带有“tag1”和“tag2”的customPage 我这样做了 SELECT CUSTOMPAGE, TAG, CUSTOMPAGE_TAG, COMMENT FROM CustomBundle:CustomPage CUSTOMPAGE JO

我用的是Symfony 2和学说。我有4个实体,CustomPage,Tag,CustomPageTag,Comment

每个CustomPage都可以有许多标记和许多注释。 我想选择一个具有特定标记的customPage(包含所有注释)

示例:我想选择带有“tag1”和“tag2”的customPage

我这样做了

SELECT CUSTOMPAGE, TAG, CUSTOMPAGE_TAG, COMMENT
FROM CustomBundle:CustomPage CUSTOMPAGE
JOIN CUSTOMPAGE.comments COMMENT
JOIN CUSTOMPAGE.tags CUSTOMPAGE_TAG
JOIN CUSTOMPAGE_TAG.tag TAG
WHERE TAG.name IN ('tag1','tag2')
GROUP BY CUSTOMPAGE.id
HAVING COUNT(DISTINCT CUSTOMPAGE_TAG.name) = 2

它工作得很好,但问题是它只返回一条注释(我想要全部注释)。

由于使用group by,您只得到一条注释,而不是使用两条join

试试这个:

SELECT CUSTOMPAGE, TAG1, CUSTOMPAGE_TAG, COMMENT
FROM CustomBundle:CustomPage CUSTOMPAGE
JOIN CUSTOMPAGE.comments COMMENT
JOIN CUSTOMPAGE.tags CUSTOMPAGE_TAG
JOIN CUSTOMPAGE_TAG.tag TAG1
JOIN CUSTOMPAGE_TAG.tag TAG2
WHERE TAG1.name= 'tag1'
AND TAG2.name= 'tag2'

我终于找到了!条令允许使用存在!因此:

$qb->expr()->exists('SELECT b...') 

谢谢你们的帮助。

你们没有加入,而是尝试加入三张桌子?没有,相同!它返回了好结果,但没有结果!