我应该避免在foreach循环中查询数据库吗?

时间:2012-01-27 20:45:35

标签: php mysql codeigniter

我确定答案是肯定的。但是我怎么写这个不同呢?

$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 个答案:

答案 0 :(得分:4)

撰写查询以加入online_ads和ad_sizes。是的,您将拥有来自online_ads表的冗余数据,但如果ad_sizes具有大的结果集,则净执行时间将更快。

答案 1 :(得分:1)

在这种情况下,您可以更好地构建以逗号分隔的ID字符串,然后使用IN运行一个查询。

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

执行以下查询:

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

另一个选择是使用JOIN个查询。在你的情况下,我会做一个JOIN