Google代码建议您应该在循环中避免SQL查询.原因是多次往返数据库会显着减慢脚本速度.他们给出的示例查询是这样的.
$userData = array();
foreach ($userList as $user) {
$userData[] = '("'.$user['first_name'].'","'.$user['last_name'].'")';
}
$query = 'INSERT INTO users (first_name,last_name) VALUES'.implode(',',$userData);
mysql_query($query);
我的问题是……
1.将查询保持在循环之外有多重要,是否总是可以避免?
2.如何使用相同的逻辑实现SELECT语句.
也就是说我有这个问题.
$index=0;
while ($index < count($id)) {
$result[] = mysql_query("SELECT * FROM tblInfo WHERE site_id = '".$id[$index]."' ");
$index++;
}
如何在循环外执行SELECT语句?我有大量的SELECT语句比这复杂得多.因此,如果认为有必要,我想从循环中获取这些查询.如果有人同意谷歌,请你发一些示例代码.
任何回复将不胜感激.
最佳答案
您可以将MySQL IN运算符与ID列表一起使用.
SELECT * FROM table WHERE id IN (1,4,6,8,5,6)
它甚至可以处理数千个ID的冗长列表(肯定比千个SELECT更好).但在这种情况下,您还应该考虑设计您的应用程序.如果你需要在每个页面加载时使用带有数千个ID的IN,那么你的设计就会出现问题.
INSERT也可以压缩成一个查询,参见documentation.
通常,循环中的大多数查询通常可以是rewritten as subqueries.但是在这种情况下,您必须在性能和可读性/可维护性之间进行选择.子查询通常很难理解和优化/调试.