我在foreach循环中有一个mysql_query,这样做的工作:
foreach ($filteredArray as $value)
{
$query = "INSERT INTO relations VALUES ('$id','$value'), ('$value','$id')";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
}
但现在我关注:我担心调用mysql的次数太多($ filteredArray在某些情况下可能非常大)。有没有一种很好的方法将它组合成一个命令?
我的第一个猜测是创建一个长字符串,看起来像这样
('$id',234), (234,'$id'), ('$id',99), (99,'$id'), ('$id',123), (234,'$123'), ...
并将其替换为命令。但是我担心这份名单可能会太长。
我在这里还有其他方法吗?
答案 0 :(得分:0)
是的,你的直觉是正确的(尽管一位评论者指出你应该避免使用mysql_ *函数,因为它们已被弃用)。如果您担心列表变得太长,您可以一次批量运行100个插入查询。像这样:
$BATCH_SIZE = 100;
$buffer = array();
for ($i = 0; $i < count($filteredArray); $i++) {
$buffer[] = $filteredArray[$i];
if (count($buffer) == $BATCH_SIZE
|| $i == count($filteredArray) - 1) {
mysql_query("INSERT INTO table (column) VALUES (" . implode(",", $buffer) . ")");
$buffer = array();
}
}