使用 Doctrine 在 Symfony2 中进行非常低效的 DQL 查询。需要改进
Very inefficient DQL query in Symfony2 with Doctrine. Need improving
我正在构建一个图表,其中包含从包含城市名称的数据库中获取的信息。目前,我正在计算每个不同的城市名称在数据库中出现的次数。
我这样做的方法是:
我在数据库中查找城市名称并将结果推送到 $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;
这应该可以帮助您...使用 groupBy 对城市进行分组,然后计算实例数。
$qb = $entityManager->createQueryBuilder();
$qb->select('accident.city','count(accident.city)')
->from('VisDatasetBundle:Accident','accident')
->groupBy('accident.city');
我正在构建一个图表,其中包含从包含城市名称的数据库中获取的信息。目前,我正在计算每个不同的城市名称在数据库中出现的次数。
我这样做的方法是:
我在数据库中查找城市名称并将结果推送到 $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;
这应该可以帮助您...使用 groupBy 对城市进行分组,然后计算实例数。
$qb = $entityManager->createQueryBuilder();
$qb->select('accident.city','count(accident.city)')
->from('VisDatasetBundle:Accident','accident')
->groupBy('accident.city');