ORDER BY Count(p.id)有可能吗?

时间:2014-12-06 02:49:10

标签: mysql symfony doctrine-orm

我有以下查询:

$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();

然而按照顺序,它不会给我一个错误:

 Error: Expected end of string, got '('

这怎么可能?我在MySQL中使用COUNT直接在orderBy中编写了一个等效查询,它工作得很好,这是一个问题吗?

修改 100%确定它是订单,因为如果我删除该行错误消失

1 个答案:

答案 0 :(得分:2)

按如下方式修改您的查询

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