Следует ли избегать запросов к базе данных в цикле foreach? - PullRequest
0 голосов
/ 28 января 2012

Я уверен, что ответ - да.Но как бы я написал это по-другому?

$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;

Ответы [ 2 ]

4 голосов
/ 28 января 2012

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

1 голос
/ 28 января 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...