在表达时挣扎着DQL和案例

时间:2014-07-31 14:55:26

标签: php sql doctrine dql

我正在尝试以下查询,并且在计数(CASE WHEN r.status = 2 THEN 1 ELSE 0 END)部分时出现问题。

我真的需要记录他们等于"完成"的状态计数。我尝试了以下但我不断得到:预期的Doctrine \ ORM \ Query \ Lexer:T_FROM,得到了'。'

有人可以帮忙吗?

$em = $this->getDoctrine()->getManager();
            $query = $em->createQuery(
                            'SELECT count(r.rpId) AS referralCount, count(CASE WHEN r.status=2 THEN 1 ELSE 0 END) as referralCompleted, p.firstName, p.lastName, p.npi, u.username
        FROM MainReferralCaptureBundle:Referral r, MainReferralCaptureBundle:Physician p, MainUserBundle:User u
        WHERE r.valid = 1 
        AND r.rpId = p.id
        AND r.submittedBy = u.id
        AND r.createdDate BETWEEN :startdate AND :enddate
        GROUP BY p.id')
                    ->setParameter('startdate', $form->get('startdate')->getData())
                    ->setParameter('enddate',  $form->get('enddate')->getData());

1 个答案:

答案 0 :(得分:1)

您没有按照SELECT声明中的所有非汇总字段进行分组。这不会导致某些rdbms出现错误,但确实会造成结果垃圾。

此外:

count(CASE WHEN r.status=2 THEN 1 ELSE 0 END)

将计算ELSE 0的所有记录。完全删除ELSE,只有在满足条件时才会计算。同样,您可以将ELSE 0更改为ELSE NULL。聚合中不包括NULL。您也可以将COUNT()更改为SUM()

我从查询本身就注意到了这一点,不确定你得到的错误是什么。