当尝试使用Doctrine 1.2执行关系分割时,我收到的“重复别名”错误超过了以下查询中的DISTINCT:
SELECT
Data.ID
FROM
Data
INNER JOIN
TaggedData ON (Data.id = TaggedData.data_id)
INNER JOIN
Tag ON (Tag.id = TaggedData.tag_id)
WHERE
Tag.id IN ('1' , '2')
HAVING COUNT(DISTINCT tag.iD)=2
如果我从查询中删除 DISTINCT ,它会运行但不会得到我想要的内容。是否有正确的方法让Doctrine超越这个问题?
$query = $this->createQuery("p")
->select("p.*")
->innerJoin("p.Data s")
->innerJoin("s.Tags c")
;
$query
->andWhereIn("c.id", $tags)
->addHaving("COUNT(DISTINCT c.id) = ?", count($tags))
;
答案 0 :(得分:1)
由于您只返回一个值,只需执行原始SQL:
$sql = <<<SQL
SELECT
Data.ID
FROM
Data
INNER JOIN
TaggedData ON (Data.id = TaggedData.data_id)
INNER JOIN
Tag ON (Tag.id = TaggedData.tag_id)
WHERE
Tag.id IN ('1' , '2')
HAVING COUNT(DISTINCT tag.iD)=2
SQL;
$conn = Doctrine_Manager::getInstance()->getConnection('connection_name');
$id = $conn->fetchOne($sql);
答案 1 :(得分:1)
你需要一个GROUP BY
子句来使用没有明显的。
所以我想如果你在GROUP BY Data.ID
之前添加HAVING
,那么一切都应该没问题。