Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql select语句中用于计算总和的子查询_Sql_Symfony_Doctrine Orm_Subquery_Dql - Fatal编程技术网

Sql select语句中用于计算总和的子查询

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

我想用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()->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版之前的条令-/