gpt4 book ai didi

mysql - 如何使用 DQL 执行关系除法?

转载 作者:行者123 更新时间:2023-11-29 06:55:55 24 4
gpt4 key购买 nike

当尝试使用 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))
;

最佳答案

因为您只返回一个值,所以只需执行原始 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);

关于mysql - 如何使用 DQL 执行关系除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com