Aktualisieren mehrerer Zeilen mit LIMIT in MySQL
Beim Versuch, eine Reihe von Zeilen mithilfe der LIMIT-Klausel zu aktualisieren, können Entwickler auf Fehler stoßen, wenn die Die Abfrage ist nicht richtig strukturiert. In diesem Artikel wird ein solches Problem untersucht und eine alternative Lösung bereitgestellt.
Ursprüngliche Abfrage und Fehler:
Betrachten Sie die folgende SQL-Abfrage:
UPDATE messages SET test_read = 1 WHERE userid='xyz' ORDER BY date_added DESC LIMIT 5, 5;
Diese Abfrage versucht, 5 Zeilen beginnend mit der 6. Zeile in absteigender Reihenfolge der Spalte „date_added“ zu aktualisieren. Allerdings meldet MySQL bei diesem Vorgang einen Fehler.
Fehlerursache:
Der Fehler tritt auf, weil die LIMIT-Klausel nicht in Verbindung mit einer ORDER BY-Klausel verwendet werden kann beim Versuch, mehrere Zeilen zu aktualisieren. Die LIMIT-Klausel schränkt die Anzahl der zurückzugebenden Zeilen ein, während die ORDER BY-Klausel die Reihenfolge bestimmt, in der Zeilen ausgewählt werden.
Alternative Lösung:
Um mehrere zu aktualisieren Wenn Sie Zeilen mit einem LIMIT-ähnlichen Ansatz verwenden, können Sie die folgende Problemumgehung verwenden:
UPDATE messages SET test_read=1 WHERE id IN ( SELECT id FROM ( SELECT id FROM messages ORDER BY date_added DESC LIMIT 5, 5 ) tmp );
Diese Abfrage führt zunächst eine Unterabfrage zur Auswahl aus die IDs der zu aktualisierenden Zeilen. Anschließend verwendet die Hauptabfrage diese IDs, um die Zeilen zu filtern, die das Update erhalten.
Erklärung der Lösung:
Die verschachtelte Unterabfrage wählt die IDs der 5 aus Zeilen ab der 6. Zeile in absteigender Reihenfolge der Spalte date_added. Die äußere Abfrage verwendet dann diese IDs, um die entsprechenden Zeilen zu identifizieren und zu aktualisieren.
Schlussfolgerung:
Während die LIMIT-Klausel nicht direkt zum Aktualisieren mehrerer Zeilen mithilfe einer ORDER verwendet werden kann BY-Klausel ermöglicht die in diesem Artikel bereitgestellte alternative Lösung Entwicklern, das gewünschte Ergebnis zu erzielen. Mithilfe dieses Ansatzes können Entwickler den Startpunkt und die Anzahl der zu aktualisierenden Zeilen angeben und so sicherstellen, dass der Vorgang genau auf die beabsichtigten Zeilen abzielt.
Das obige ist der detaillierte Inhalt vonWie kann ich mit LIMIT und ORDER BY mehrere MySQL-Zeilen mit einem Offset aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!