Php 如何在条令中准确获得一个订单的用户数/计数?

Php 如何在条令中准确获得一个订单的用户数/计数?,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我正在从事一个基于Symfony 2.8的项目,该项目允许用户下订单 现在,我想创建一个条令查询,它返回恰好符合一个订单的用户数。我以为这会很容易,但我在这几个小时 选择用户及其订单数量 从步骤1的结果中选择order_count=1的所有用户 通过在步骤2的结果中仅选择来自用户的订单并添加条件(例如状态=已完成),应用更多筛选器 在SQL中,以下方法可以很好地解决步骤1: SELECT user_id, COUNT(*) as count FROM order WHERE status = '

我正在从事一个基于Symfony 2.8的项目,该项目允许用户下订单

现在,我想创建一个条令查询,它返回恰好符合一个订单的用户数。我以为这会很容易,但我在这几个小时

选择用户及其订单数量 从步骤1的结果中选择order_count=1的所有用户 通过在步骤2的结果中仅选择来自用户的订单并添加条件(例如状态=已完成),应用更多筛选器 在SQL中,以下方法可以很好地解决步骤1:

SELECT user_id, COUNT(*) as count FROM order WHERE status = 'completed' GROUP BY user_id
然而,当我试图将其转换为学说时,我得到以下错误:

$qb->select('o_inner.user, COUNT(*) as count')
    ->from('MyBundle:Order', 'o_inner')
    ->where('o_inner.status = :status')
    ->groupBy('o_inner.user')
    ->setParameter('status', 'completed');

[Doctrine\ORM\Query\QueryException]                              
[Syntax Error] line 0, col 30: Error: Expected Literal, got '*'
所以我甚至不能解决第一步。你知道怎么做吗

编辑:

用不同的选择做了更多的实验:

$qb->select('o_inner.user, COUNT(o_inner.user) as count')
$qb->select('COUNT(o_inner.user) as count')

==> [Doctrine\ORM\Query\QueryException]                                                                             
    [Semantical Error] line 0, col 39 near 'FROM MyBundle:Order': Error: Class 'FROM' is not defined.


$qb->select('COUNT(o_inner.user)')
==> Works fine. So the "as count" statement seems to be a problem


$qb->select('o_inner.user')
==> [Doctrine\ORM\Query\QueryException]                                                                                           
    [Semantical Error] line 0, col 12 near 'user FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

$qb->select('o_inner')
==> Workes fine

$qb->select('o_inner, COUNT(o_inner.user)')
==> Workes fine

所以$qb->select'o_inner,COUNTo_inner.user'似乎适用于步骤1。但是由于我不能使用自定义别名。。。由于计数不起作用,如何在外部选择中引用计数结果?

您正在使用ORM,因此需要指定要计数的字段,例如:

$qb->select('o_inner.user, COUNT(o_inner.user) as count')
    ->from('MyBundle:Order', 'o_inner')
    ->where('o_inner.status = :status')
    ->groupBy('o_inner.user')
    ->setParameter('status', 'completed');
;
$tags = $qb->getQuery()->getResult();

对于报告/统计等复杂查询,您不必使用ORM


单个优化的SQL查询可能具有更好的性能,并且更易于理解和维护。

请尝试counto_inner.user或counto_inner.id,它需要一个文本。当做