2013-03-11 17 views
16

我試圖更新我的表是這樣的:更新多「其中」條款多行對每個單排

Update MyTable 
SET value  = 1 
WHERE game_id = 1, 
     x  =-4, 
     y  = 8 

SET value  = 2 
WHERE game_id = 1, 
     x  =-3, 
     y  = 7 

SET value  = 3 
WHERE game_id = 2, 
     x  = 5, 
     y  = 2 

我可以做一個foreach()但將發送超過50個單獨的查詢,這是非常慢。 這就是爲什麼我希望它被合併爲1大查詢。

(我使用的ID的每一行,但game_idXÿ的組合是什麼,我用它來確定我需要的行。)

的update_batch()函數從這裏描述的codeIgniter: Update batch with CodeIgniter 是有幫助和幾乎完美的,但它只允許1單where子句,你不能(據我瞭解和嘗試)輸入一個數組與多個where子句。

我也檢查了這個問題: MYSQL UPDATE SET on the Same Column but with multiple WHERE Clauses 但它只允許多個行更新只包含一個不同的WHERE子句,我需要多個WHERE子句! :)

Anwsers可以在簡單的SQL或使用PHP(和CodeIgniter)或以不同的方式。我會以任何可能的方式解決這個問題;)

我真的可以使用advice/help! = d

回答

39

讓這個嘗試通過使用CASE

Update MyTable 
SET  value = CASE 
        WHEN game_id = 1 AND x = -4 AND y = 8 THEN 1 
        WHEN game_id = 1 AND x = -3 AND y = 7 THEN 2 
        WHEN game_id = 2 AND x = 5 AND y = 2 THEN 3 
        ELSE value 
       END 
WHERE game_ID IN (1,2,3) AND -- the purpose of this WHERE clause 
     x IN (-4, -3, 5) AND -- is to optimize the query by preventing from 
     y IN (8,7,2)   -- performing full table scan. 
+0

謝謝!我現在就去試試吧! – Dex 2013-03-11 17:05:32

+0

一定要先備份你的數據庫':D' – 2013-03-11 17:05:56

+1

它的工作表示感謝,你是我的英雄! =) – Dex 2013-03-11 19:04:10