2013-03-11 3 views
16

ich so meine Tabelle zu aktualisieren, ich versuche:aktualisieren mehrere Zeilen mit mehreren ‚wo‘ Klauseln für jede einzelne Zeile

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 

Ich kann ein foreach() tun, aber das wird mehr als 50 separaten Abfragen, die senden ist sehr langsam . Deshalb möchte ich es in 1 große Abfrage kombiniert werden.

(verwende ich eine ID für jede Zeile, aber die Kombination von game_id, x und y ist, was ich die Zeile identifizieren verwenden, ich brauche.)

Die update_batch() Funktion von codeIgniter hier beschrieben: Update batch with CodeIgniter war hilfreich und fast perfekt, aber es nur für eine einzige WHERE-Klausel erlaubt, können Sie nicht (soweit ich es verstanden und versuchte) ein Array mit mehreren WHERE-Klauseln eingeben.

Ich habe auch geprüft, diese Frage aus: MYSQL UPDATE SET on the Same Column but with multiple WHERE Clauses Aber es erlaubt nur für mehrreihige Updates nur eine einzige andere enthält WHERE-Klausel und ich mehrere WHERE-Klauseln müssen! :)

Anwsers können in einfacher SQL oder mit der Verwendung von PHP (und CodeIgniter) oder auf andere Weise sein. Ich würde dieses Problem auf jede mögliche Weise lösen;)

Ich kann wirklich den Rat/die Hilfe nutzen! = D

Antwort

39

diesem einen Versuch geben, indem 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

Sie mit Dank! Ich werde es jetzt ausprobieren! – Dex

+0

sicher sein, Ihre Datenbank zuerst zu sichern ': D' –

+1

Es hat funktioniert, danke, du bist mein Held! =) – Dex

Verwandte Themen