Mysql 可以按计数(p.id)订购吗?

Mysql 可以按计数(p.id)订购吗?,mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,我有以下疑问: $queryBuilder = $em->createQueryBuilder()->select('s') ->from("MainBundle:Style", 's') ->select('DISTINCT s') ->leftJoin('s.pictureStyle', 'ps') ->leftJoin('ps.

我有以下疑问:

$queryBuilder = $em->createQueryBuilder()->select('s')
                ->from("MainBundle:Style", 's')
                ->select('DISTINCT s')
                ->leftJoin('s.pictureStyle', 'ps')
                ->leftJoin('ps.picture', 'p')
                ->leftJoin('p.category', 'pc');

        if ($category instanceof InstagramTopCategory)
        {
            $queryBuilder->leftJoin('pc.pictureTopCategory', 'category');
        }
        else if ($category instanceof InstagramFirstLevelCategory)
        {
            $queryBuilder->leftJoin('pc.pictureFirstLevelCategory', 'category');
        }
        else if ($category instanceof InstagramSecondLevelCategory)
        {
            $queryBuilder->leftJoin('pc.pictureSecondLevelCategory', 'category');
        }

        $query = $queryBuilder->where('category = :category')
                ->andWhere('p.isLocked = 0')
                ->andWhere('p.deletedAt IS NULL')
                ->orderBy('COUNT(p.id)', 'DESC')
                ->groupBy('ps.pictureStyle')
                ->setParameter('category', $category)
                ->setMaxResults(10)
                ->getQuery();
但是,在order by中,它没有给出以下错误:

 Error: Expected end of string, got '('
这怎么可能?我在MySQL中使用COUNT直接在orderBy中编写了一个等价的查询,它工作得很好,这是理论中的一个问题吗

编辑:
100%确定这是order by,因为如果我删除该行,错误就会消失

$queryBuilder = $em->createQueryBuilder()
    ->select('s')
    ->from("MainBundle:Style", 's')
    ->select('DISTINCT s')
    ->addSelect('COUNT(p.id) as HIDDEN c_id')
   [...]
    ->orderBy('c_id', 'DESC')
   [...]

您确定错误来自订购人吗?如果删除该行,错误就会消失?@Tom yes如果删除该行,错误就会消失。我不知道Doctrine是如何生成其SQL的,但在实际SQL语法中,
GROUP BY
必须位于
ORDER BY
之前。您是否尝试将您的
->orderBy(…)
->groupBy(…)
移动到正常顺序?尝试在字段列表中按变量添加该顺序,并按顺序使用该变量,如下所示
选择计数(p.id)由于cnt
使用
按cnt DESC排序
这可以工作,但随后它也会返回计数..因此它将是数组的数组。。如何从返回中删除计数?如果您不能做任何其他操作,请取消设置:)条令已隐藏,因此您可以使用
->addSelect('count(p.id)as HIDDEN c_id')