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

问题描述:

我确定答案是肯定的。但是,我会如何写这不同?我应该避免在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上进行联接,这样您就不必在服务器上循环。 – 2012-01-27 20:48:49

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

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

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

并执行以下查询:

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

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