【问题标题】:Very inefficient DQL query in Symfony2 with Doctrine. Need improvingSymfony2 中使用 Doctrine 的 DQL 查询效率非常低。需要改进
【发布时间】:2016-02-01 00:47:24
【问题描述】:

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

我的做法是:

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

【问题讨论】:

    标签: php mysql symfony doctrine-orm dql


    【解决方案1】:

    这应该可以帮助您...使用 groupBy 对城市进行分组,然后计算实例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多