Уменьшите соединение с базой данных с помощью Doctrine и Symfony - PullRequest
1 голос
/ 06 сентября 2011

Я получаю весь город и использую функцию для подсчета:

foreach ($cities as $city) {
echo $city->getName() . '|' . CityTable::getInstance()->getCount($city->getId(), a). '|' . CityTable::getInstance()->getCount($city->getId(), b). '|' . CityTable::getInstance()->getCount($city->getId(), c);
}

public function getCount($id, $num)
   {
       $q = $this->createQuery('u')
           ->where('city_id = ?', $id)
           ->andWhere('num = ?', $num)
           ->execute();

       return count($q);
   }

это работает нормально, но это генерируется для многих, связанных с базой данных.С каждой итерацией в foreach три раза вызывается функция getCount.Если у меня в таблице городов более 1000 городов, то у меня более 10000 запросов к базе данных.Как я могу уменьшить это?

Ответы [ 2 ]

3 голосов
/ 06 сентября 2011

Попробуйте что-то вроде этого запроса:

       $q = $this->createQuery('u')
           ->select('COUNT(u.id) as count')
           ->where('num = ?', $num)
           ->groupBy('city_id')
           ->execute();
0 голосов
/ 06 сентября 2011

Если у вас достаточно свободной памяти, загрузите всю таблицу в массив и зациклите их, используя простой алгоритм.Если у вас недостаточно памяти, загрузите куски данных и зациклите их в PHP.

Запрос к БД - это простой (не сложный) способ.Вы уменьшите количество запросов к базе данных до нескольких.

...