Wie führe ich mehrere Aktualisierungen in einer einzigen SQL-Abfrage durch?

7

Ich habe eine SQL-Abfrage, die folgende Form annimmt:

%Vor%

Ich habe auch ein PHP-Array mit einer Liste von IDs. Was ist der beste Weg, dies anders als mit dem Parsen zu erreichen, wie folgt, ...

%Vor%

... und die Ausgabe in der WHERE -Klausel verwenden?

    
Esa 02.09.2008, 15:22
quelle

8 Antworten

9

Dies würde das gleiche erreichen, aber wahrscheinlich wird nicht viel von einer Geschwindigkeitszunahme ergeben, sieht aber schöner aus.

%Vor%     
Chris Bartow 02.09.2008, 15:29
quelle
5

Sie sollten die IN-Klausel verwenden können (vorausgesetzt, Ihre Datenbank unterstützt sie):

UPDATE foo SET flag=true WHERE id in (1, 2, 3, 5, 6)

    
matt b 02.09.2008 15:27
quelle
5

Verwenden Sie die IN-Anweisung. Geben Sie eine kommagetrennte Liste mit Schlüsselwerten ein. Sie können dies leicht mit implode function tun.

%Vor%

Alternativ können Sie die Bedingung:

verwenden %Vor%

oder Unterabfrage:

%Vor%     
Michał Rudnicki 02.09.2008 15:30
quelle
1

Verwenden Sie join / implode, um eine durch Kommas getrennte Liste mit:

zu erstellen %Vor%     
Forgotten Semicolon 02.09.2008 15:29
quelle
0

Ich habe noch nie einen anderen Weg gesehen als die foreach-Schleife.

Aber wenn $ list in irgendeiner Weise vom Benutzer erhalten wird, sollten Sie die vorbereitete Anweisung verwenden und nur eine Zeile nach der anderen aktualisieren (vorausgesetzt, dass jemand keine Möglichkeit hat, mehrere Zeilen mit einer vorbereiteten Anweisung zu aktualisieren) ). Ansonsten sind Sie offen für SQL-Injektion.

    
Ryan Ahearn 02.09.2008 15:27
quelle
0

Sie können eine Aktualisierung mit case-Anweisungen durchführen, aber Sie müssen die Abfrage selbst erstellen.

%Vor%

Der Platz kann weggelassen werden, aber Sie ersparen sich eine vollständige Tabellenaktualisierung.

    
jason saldo 02.09.2008 15:29
quelle
0

VB.NET-Code: dim delimitedIdList als String = arrayToString (listOfIds)

dim SQL als Zeichenfolge="UPDATE foo SET-Flag = wahr WHERE-ID in (" + delimitedIdList + ")"

runSql (SQL)

    
csmba 02.09.2008 15:29
quelle
0

Wenn Sie eine Grenze für die Anzahl der Elemente kennen, dann verwenden Sie die "IN" -Klausel, wie andere vorgeschlagen haben:

%Vor%

Eine Warnung ist jedoch, dass abhängig von Ihrer Datenbank die Anzahl der Elemente in der Klausel begrenzt sein kann. ZB hatte oracle 7 oder 8 (?) Ein Limit von 256 Items (das wurde in späteren Versionen deutlich erhöht)

Wenn Sie über eine Liste iterieren, verwenden Sie eine Transaktion, sodass Sie einen Rollback durchführen können, wenn eines der Updates fehlschlägt.

    
hamishmcn 02.09.2008 15:39
quelle

Tags und Links