2011-09-05 88 views
1

我得到的所有城市和使用功能的數連接到數據庫:減少教義和Symfony的

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個查詢數據庫。 我如何減少這個?

回答

0

如果您有足夠的可用內存將整個表加載到數組並使用簡單算法對其進行循環。如果你沒有足夠的內存加載數據,並用PHP進行循環。

查詢數據庫是一種簡單(不容易)的方法。你會減少數據庫查詢只有幾個。

3

嘗試這樣的查詢:

 $q = $this->createQuery('u') 
      ->select('COUNT(u.id) as count') 
      ->where('num = ?', $num) 
      ->groupBy('city_id') 
      ->execute(); 
+0

這不是幫助我 –