Sql select语句中用于计算总和的子查询
我想用Symfony 2.x在条令中表示以下SQL查询:Sql select语句中用于计算总和的子查询,sql,symfony,doctrine-orm,subquery,dql,Sql,Symfony,Doctrine Orm,Subquery,Dql,我想用Symfony 2.x在条令中表示以下SQL查询: SELECT (SELECT sum(J.amount) FROM journals as J WHERE debit_id = ?) - (SELECT sum(J.amount) FROM gold.journals as J WHERE credit_id = ?) 我花了一些时间使用querybuilder,然后转到DQL查询: $q = $this->getEntityManager()->createQuer
SELECT (SELECT sum(J.amount) FROM journals as J WHERE debit_id = ?) - (SELECT sum(J.amount) FROM gold.journals as J WHERE credit_id = ?)
我花了一些时间使用querybuilder,然后转到DQL查询:
$q = $this->getEntityManager()->createQuery('SELECT (SELECT sum(J.amount) FROM xxx\Entity\Journal as J WHERE debit = ?) - (SELECT sum(J.amount) FROM xxx\Entity\Journal as J WHERE credit = ?))');
这两者都会导致某种语法异常:
Syntax Error] line 0, col 97: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '-'
运行此查询的最佳方法是什么?尝试使用以下方法:
$q = $this->getEntityManager()->createQuery('SELECT
(
(SELECT sum(J.amount) FROM xxx\Entity\Journal as J WHERE debit = ?)
-
(SELECT sum(J.amount) FROM xxx\Entity\Journal as J WHERE credit = ?)
) as total
');
然后获取查询结果的标量值
$q->getQuery->getSingleScalarResult();
尝试在条令中执行嵌套查询。Oukay现在找到了解决方案:
$qb = $this->getEntityManager()->createQueryBuilder();
$x = $qb->select()
->addSelect('(SELECT sum(J1.amount) FROM xxx\Entity\Journal as J1 WHERE J1.debit = :id)')
->addSelect('(SELECT sum(J2.amount) FROM xxx\Entity\Journal as J2 WHERE J2.credit = :id)')
->from("xxx\Entity\Journal", "tmp")
->setMaxResults(1)
->setParameter('id', 1);
return print_r($x->getQuery()->getArrayResult()[0],true);
这有点难看,因为查询生成器似乎需要将->from()设置为某个值。。。这就是为什么我使用setMaxResults来限制输出。这仍然不是完美的解决方案,但是。。。这是一个很好的开始。为什么不通过单独的查询得到每个总和,然后减去它们呢。您的sql查询无效这将是我的最后一个解决方案。但我很好奇是否有一种条令方法可以解决我的问题…对我不起作用:-/[语法错误]第0行,第32列:错误:预期文字,得到“选择”看起来本教程适用于2.x版之前的条令-/