我应该避免在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;
答
撰写查询以加入online_ads和ad_sizes。是的,您将拥有online_ads表中的冗余数据,但是如果ad_sizes具有较大的结果集,则净执行时间会更快。
答
在这种情况下,您可以更好地构建逗号分隔的ID字符串,然后使用IN
运行一个查询。
$ids = implode(',', $ad_array);
并执行以下查询:
$sql = "SELECT * FROM table WHERE id IN ($ids)";
另一种选择是使用JOIN
查询。在你的情况下,我会做一个JOIN
。
您可能会在online_ads和ad_sizes上进行联接,这样您就不必在服务器上循环。 – 2012-01-27 20:48:49