Я пытаюсь сделать следующий запрос к БД, чтобы получить следующие результаты:
Ожидаемые результаты
У меня есть таблица Области, но я хочу отсортировать результаты по словам ответственного, это означает, что ответственные лица с большим количеством областей вверху и ответственные лица с меньшим количеством областей внизу.
На самом деле я делаю это с помощью следующего Mysql запроса, который прекрасно работает:
SELECT a.id_Area,
a.name,
a.responsible
FROM FSA_Areas a
WHERE enabled=TRUE
AND id_Plant = 1
ORDER BY (SELECT COUNT(*)
FROM FSA_Areas a1
WHERE a1.Responsible = a.Responsible
AND a1.id_Plant = a.id_Plant
AND Enabled='1') DESC,
a.responsible;
Но теперь я хочу сделать это в Doctrine Query Builder или DQL
Я пробовал это, это не сработало:
$query = $em->createQueryBuilder()
->select('u')
->from('FSABundle:FSAArea','u')
->orderBy($this->createQueryBuilder('u1')
->select('count(u1)')
->from('FSABundle:FSAArea', 'u1')
->where('u1.responsible = u.responsible')
->andWhere('u1.plant = u.plant')
->andWhere('u1.enabled = enabled')
,'DESC')
->getQuery()->getResult();
return $query;
Любая идея о том же Mysql Запрос в DQL или Query Builder?
ТЕСТ 1:
$sub = $em->createQueryBuilder('a')
->select('COUNT(a.id)')
->from('FSABundle:FSAArea','a')
->where('a.responsible = u.responsible')
->andWhere('a.plant = u.plant')
->andWhere('a.enabled = :status')
->setParameter('status','true');
$qb->select('u')
->from('FSABundle:FSAArea','u')
->where('u.enabled = :status')
->andWhere('u.plant = :idPlant')
->setParameter('status','enabled')
->setParameter('idPlant','1')
->orderBy($sub->getDQL(),'DESC');
return $qb->getQuery()->getResult();