Mysql 如何使用DQL执行关系划分?
当尝试使用Doctrine 1.2执行关系划分时,我收到一个“重复别名”错误,该错误与下面查询中的DISTINCT类似:Mysql 如何使用DQL执行关系划分?,mysql,symfony-1.4,doctrine-1.2,doctrine-query,Mysql,Symfony 1.4,Doctrine 1.2,Doctrine Query,当尝试使用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') HA
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,它会运行,但不会得到我想要的。有没有一个合适的方法让教义通过这个问题
具体代码:
因为您只返回一个值,所以只需执行原始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);
$sql=您需要一个GROUPBY
子句来使用having WITH WITH distinct。
因此,我想如果您在拥有之前添加GROUP BY Data.ID
,一切都会好起来。在这种情况下,我的示例简化了太多。因此,我将返回多个对象实例。您确定吗?-这似乎在常规SQL中有效,我现在正尝试将其转换为DQL。也许不需要添加分组依据,但使用have
而不使用groupby
不是最佳做法。顺便说一下,我不是条令专家,但groupBy('Data.ID')
应该能解决您的问题。嗯,这里的问题肯定与条令有关。它一直在窃听不同的存在。事实证明,在切换到原始查询后,我确实需要它!谢谢你至少提到这一点,因为我相信这已经解决了我的最后一个问题。
$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);