2012-09-13 38 views
0

我试图一次执行多个更新查询。请看下面提到的代码。如何使用mysql执行多个更新查询

实际代码块:

$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循环,并且可能需要很多时间才能逐个执行每个查询。我上面的方法可能不正确。但是,你的想法可以帮助我这样做。

在此先感谢。

+1

你需要多个查询,你只能在一次执行一个语句。 –

+2

你可以在你的查询中使用'IN',比如'UPDATE items SET ActiveItem = 1 WHERE id IN($ items_id_comma_separated)' –

+0

在数据库级别,它会逐个执行。所以,没有必要做你想做的事。你没有获得任何东西。 – nullpotent

回答

2

为什么不使用in功能是这样的:

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

假定该值是数值,不需要在单引号被encapsed。 如果是这样,这应该工作:

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

谢谢..它的工作.. – Debashis

3

你可以尝试使用IN:

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

这个答案也是正确的,并希望选择正确的。但是,因为我只能选择一个答案作为正确的答案,所以我想与第一个答案一起描述更多。但是,我也将这个答案标记为“有用”。 – Debashis

+0

我会劝阻使用第一个主张直接在数据库查询中使用用户输入的项目。这将是非常不安全的。 – Andrew

+0

好的。我会记住这一点。感谢您的线索。 – Debashis