2012-01-27 3 views
0

Я уверен, что да. Но как бы я написал это по-другому?Должен ли я избегать запросов к базе данных в цикле foreach?

$query = $this->db->get_where('online_ads', array('id' => 20))->row()->size; 
$ad_array = json_decode($query, TRUE); 
$result = ''; 

foreach ($ad_array as $a): 
    $query = $this->db->get_where('ad_sizes', array('id' => $a))->row(); 
    $result .= $query->name.' '; 
endforeach; 

echo $result; 
+0

Возможно, вы, возможно, присоединитесь к online_ads и ad_sizes, и таким образом вам не нужно будет зацикливаться на сервере. –

ответ

4

Напишите запрос, чтобы присоединиться к online_ads и ad_sizes. Да, у вас будут избыточные данные из таблицы online_ads, но если ad_sizes имеет большой набор результатов, время выполнения сети будет намного быстрее.

1

В подобных ситуациях вы могли бы лучше построить строку идентификаторов, разделенных запятыми, а затем запустить только один запрос, используя IN.

$ids = implode(',', $ad_array); 

И выполнить следующий запрос:

$sql = "SELECT * FROM table WHERE id IN ($ids)"; 

Другой вариант заключается в использовании JOIN запросов. В вашем случае я бы сделал JOIN.

Смежные вопросы