Php Symfony2中的DQL查询效率非常低,带有条令。需要改进

Php Symfony2中的DQL查询效率非常低,带有条令。需要改进,php,mysql,symfony,doctrine-orm,dql,Php,Mysql,Symfony,Doctrine Orm,Dql,我正在用从包含城市名称的数据库中获取的信息构建一个图表。目前,我正在计算每个不同的城市名称在数据库中出现的次数 我这样做的方式是: 我在数据库中找到城市名称,并将结果推送到$result 然后,我继续执行while循环,在每次迭代中创建一个查询生成器,然后运行查询以查找城市出现的次数,并将结果推送到$count,然后将$count的值推送到包含其相应城市名称的$result中 目前数据库中有30个城市,这意味着每次加载页面时我都会运行30个查询,而且数量会越来越高,有人能告诉我如何减少这个过程的

我正在用从包含城市名称的数据库中获取的信息构建一个图表。目前,我正在计算每个不同的城市名称在数据库中出现的次数

我这样做的方式是:

我在数据库中找到城市名称,并将结果推送到
$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;
$qb=$entityManager->createQueryBuilder();
$qb->select('contract.city')->distinct();
$qb->from('VisDatasetBundle:Incident','Incident');
$result=$qb->getQuery()->getResult();
$i=0;
$qb->delete();
而($icreateQueryBuilder();
$qb->select('count(incident.city)');
$qb->from('VisDatasetBundle:incident','incident');
$qb->where('contract.city=\'.$result[$i]['city'.\'');
$count=$qb->getQuery()->getResult();
$result[$i]['count']=$count[0]['1'];
$qb->delete();
$i++;
}
返回$result;

这将帮助您。。。使用groupBy对城市进行分组,然后统计实例

$qb = $entityManager->createQueryBuilder();
$qb->select('accident.city','count(accident.city)')
   ->from('VisDatasetBundle:Accident','accident')
   ->groupBy('accident.city');