gpt4 book ai didi

php - 使用 Doctrine 在 Symfony2 中进行非常低效的 DQL 查询。需要改进

转载 作者:行者123 更新时间:2023-11-28 23:38:26 36 4
gpt4 key购买 nike

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

我这样做的方式是:

我在数据库中查找城市名称并将结果推送到 $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');

关于php - 使用 Doctrine 在 Symfony2 中进行非常低效的 DQL 查询。需要改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121455/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com