Я строю диаграмму с информацией, взятой из базы данных, содержащей названия городов. В настоящее время я подсчитываю, сколько раз в базе данных появляется каждое отдельное название города.Очень неэффективный DQL-запрос в Symfony2 с Doctrine. Нужно улучшить
Как я сделал это:
Я нахожу название городов в базе данных и протолкнул результат $result
.
Затем я продолжаю цикл while, который создает построитель запросов на каждой итерации. Затем я запускаю запрос для поиска количества раз, когда город подходит, и нажимаем результат на $count
, а затем нажимаем значение $count
в $result
, который содержит соответствующее название города.
В настоящее время в базе данных 30 городов, это означает, что я выполняю 30 запросов каждый раз, когда страница загружается, и эта сумма только повышается, может ли кто-нибудь указать мне в правильном направлении того, как чтобы уменьшить этот процесс, я уверен, что можно найти счет каждого города одновременно с поиском $result
, но я не уверен, как и я ничего не нахожу в Интернете.
$qb = $entityManager->createQueryBuilder();
$qb->select('accident.city')->distinct();
$qb->from('VisDatasetBundle:Accident','accident');
$result = $qb->getQuery()->getResult();
$i = 0;
$qb->delete();
while($i < count($result)){
$qb = $entityManager->createQueryBuilder();
$qb->select('count(accident.city)');
$qb->from('VisDatasetBundle:Accident', 'accident');
$qb->where('accident.city = \'' . $result[$i]['city'] . '\'');
$count = $qb->getQuery()->getResult();
$result[$i]['count'] = $count[0]['1'];
$qb->delete();
$i++;
}
return $result;