0

一度に複数の更新クエリを実行しようとしています。以下のコードをご覧ください。

実際のコード ブロック:

$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);
}

上記のコードは、各クエリを 1 つずつ実行します。しかし、一度にすべてのクエリを実行したいので、以下のコードを試しました。

$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 つずつ実行するのに時間がかかる可能性があるため、実行時間を節約することです。私の上記のアプローチは正しくないかもしれません。しかし、あなたのアイデアは私がそうするのに役立ちます。

前もって感謝します。

4

2 に答える 2

3

IN を使用してみることができます。

ids = array(1,2,3....);
$update_query .= "UPDATE items SET ActiveItem=1 WHERE id IN (".implode(',', $ids).")";
于 2012-09-13T12:33:16.513 に答える
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)."')";
于 2012-09-13T12:31:53.487 に答える