mysql - 将许多命令合并为一个

时间:2014-03-09 21:06:59

标签: php mysql

我在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'), ...

并将其替换为命令。但是我担心这份名单可能会太长。

我在这里还有其他方法吗?

1 个答案:

答案 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();
  }
}