2012-07-26 5 views
31
$query = mysql_query("UPDATE a SET fruit = '**apple**' WHERE id = '**1**' "); 
$query2 = mysql_query("UPDATE a SET fruit = '**orange**' WHERE id = '**2**' "); 
$query3 = mysql_query("UPDATE a SET fruit = '**peach**' WHERE id = '**3**' "); 

Gibt es eine Möglichkeit, es zu einer Abfrage zu vereinfachen?Wie Bulk-Aktualisierung von MySQL-Daten mit einer Abfrage?

+0

Sie haben Wert für Obst und ID sind in Array? – Jalpesh

+0

Ich möchte sagen, dass der Wert der Frucht und ID, wie Sie bekommen können ?? – Jalpesh

Antwort

48

Ja, Sie können es tun, um diese Abfrage mit:

INSERT into `table` (id,fruit) 
    VALUES (1,'apple'), (2,'orange'), (3,'peach') 
    ON DUPLICATE KEY UPDATE fruit = VALUES(fruit); 

Id eindeutige oder Primärschlüssel sein muss:

UPDATE a 
SET fruit = (CASE id WHEN 1 THEN 'apple' 
        WHEN 2 THEN 'orange' 
        WHEN 3 THEN 'peach' 
      END) 
WHERE id IN(1,2 ,3); 
+0

'case id wenn 1 dann 'apple' wenn 2 dann ...' ist eine Alternative. –

+0

ja danke! Aktualisierter Beitrag! – Omesh

+0

Du bist großartig Omesh! –

48

ich folgende Lösung gefunden. Aber weiß nicht über die Leistung.

+0

Das funktioniert für mich. Ich frage mich, warum mysql keine Bulk-Update-Anweisung implementiert. –

+0

Könnten sie denken, dass vorbereitete Anweisungen gut genug ist? – Yaroslav

+1

Ideale Lösung für einige Anwendungsfälle, aber dies funktioniert nicht, wenn 'table' eine erforderliche Spalte' b' hat, die keinen Standardwert hat, selbst wenn die Datensätze, die gerade aktualisiert werden, diesen Wert bereits definiert haben erfordert einen anderen Ansatz –

-6

Ja, Sie können dies erreichen, indem sie diese ausführt; Ich hoffe, es funktioniert.

UPDATE a SET Obst = (CASE-ID, wenn 1 THEN 'Apfel' , wenn 2 THEN 'Orange' WHEN 3 THEN 'peach' END) WHERE ID IN (1,2, 3);

+2

Dies ist wörtlich ein Kopieren/Einfügen der angenommenen Antwort – Kip

Verwandte Themen