簡體   English   中英

使用一個查詢更新多行

[英]Update multiple rows with one query

如何一次更新數百行?

喜歡: UPDATE table SET a = ? WHERE b = ? AND c = 1 UPDATE table SET a = ? WHERE b = ? AND c = 1

但對於許多行。 ? 參數是數組......

我讀了這個答案,但它使用CASE而我認為我不能這樣做......


現在我有這樣的事情:

foreach($values as $key => $value)
  $res = $pdo->prepare('UPDATE table SET a = ? WHERE b = ? AND c = 1');
  $res->execute(array($value, $key));
}

要在一次查詢運行中執行此操作,您需要使用CASE以編程方式組裝參數 SQL不支持可變參數預處理語句,只能參數化簡單值

或者,定義一個語句,一次只獲取一行數據,然后循環運行查詢。 重復執行是指如何將准備語句設計用於此類情況。

try {
    $query = $db->prepare('UPDATE table SET a = ? WHERE b = ? AND c = 1');
    foreach ($as as $i => $a) {
        $query->execute(array($a, $bs[$i]));
    }
} catch (PDOException $e) {
    ...
}

使用您提供的鏈接中描述的CASE方法,但使用您想要的值動態構建查詢。

可能,這將使用類似於您已經執行過的for循環構建,但是您將最終使用單個查詢而不是每次迭代查詢數據庫。

另一種方法是將鍵值對(一次性全部)插入臨時表,然后執行以下操作:

UPDATE table t
SET t.a = (SELECT p.a FROM tmp p WHERE p.b = t.b)
WHERE t.b IN (SELECT p.b FROM tmp p) AND t.c = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM