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');