如何使用mysql执行多个更新查询

时间:2012-09-13 12:28:05

标签: php mysql phpmyadmin

我正在尝试一次执行多个更新查询。请查看下面提到的代码。

实际代码块

$relist_item_id  = $_REQUEST['relist_item_id'];   // an array
$relist_item_num = count($relist_item_id);

for($j = 0; $j < $relist_item_num; $j++){
  $item_id = $relist_item_id[$j]; 
  $update_query = "UPDATE items SET ActiveItem=1 WHERE id=$item_id";
  mysql_query($update_query);
}

上面的代码将逐个执行每个查询。但我想一次执行所有查询,所以我尝试了下面的代码。

$update_query = '';
for($j = 0; $j < $relist_item_num; $j++){
  $item_id = $relist_item_id[$j]; 
  $update_query .= "UPDATE items SET ActiveItem=1 WHERE id=$item_id;";
}
mysql_query($update_query); 

上述代码未执行/更新记录。但是,我想以类似的方式执行。是否可以这样做?

在phpmyadmin中使用“SQL”,我已经检查过我们一次可以执行多个查询,即一次可以执行多个更新查询。例如。下面提到的更新查询将一次执行。

UPDATE items SET ActiveItem=1 WHERE id=1;UPDATE items SET ActiveItem=1 WHERE id=5;UPDATE items SET ActiveItem=1 WHERE id=10;UPDATE items SET ActiveItem=1 WHERE id=12;UPDATE items SET ActiveItem=1 WHERE id=15;UPDATE items SET ActiveItem=1 WHERE id=16;UPDATE items SET ActiveItem=1 WHERE id=20;

我还想知道查询是否存在任何限制,例如我们一次最多可以执行20个查询?

我的实际目标是节省执行时间,因为可能存在巨大的for循环,并且可能需要很多时间来逐个执行每个查询。我的上述方法可能不正确。但是,你的想法可以帮助我这样做。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用IN:

ids = array(1,2,3....);
$update_query .= "UPDATE items SET ActiveItem=1 WHERE id IN (".implode(',', $ids).")";

答案 1 :(得分:2)

为什么不使用这样的in函数:

$relist_item_id  = $_REQUEST['relist_item_id'];   // an array
$query="UPDATE items 
    SET ActiveItem=1 WHERE id in (".implode(', ', $relist_item_id).")";

假设值是数字,不需要用单引号括起来。 如果是,这应该有效:

$query="UPDATE items 
    SET ActiveItem=1 WHERE id in ('".implode("', '", $relist_item_id)."')";