Heim  >  Artikel  >  Datenbank  >  Wie erreicht man Zeilenaktualisierungen und -abrufe in einer einzigen MySQL-Abfrage?

Wie erreicht man Zeilenaktualisierungen und -abrufe in einer einzigen MySQL-Abfrage?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 19:48:29548Durchsuche

How to Achieve Row Updates and Retrieval in a Single MySQL Query?

Zeilenaktualisierungen und -abrufe in einer einzigen MySQL-Abfrage erreichen

In MySQL kann die Ausführung mehrerer Abfragen zeitaufwändig sein. Um die Leistung zu optimieren, ist es wünschenswert, Abfragen zu einer einzigen Abfrage zusammenzufassen. Dies ist der Kern einer von Quan gestellten Abfrage: Können zwei Abfragen zusammengeführt werden, um aktualisierte Zeilen zurückzugeben?

Die erste Abfrage wählt Zeilen aus einer Tabelle basierend auf bestimmten Kriterien aus, während die zweite Abfrage Zeilen aktualisiert, die dieselben Kriterien erfüllen. Das Kombinieren dieser Abfragen erfordert eine Technik, die sowohl Lesen als auch Schreiben in einem einzigen Vorgang ermöglicht.

Ein Ansatz besteht darin, eine Unterabfrage zu verwenden. Allerdings stieß Quan bei dieser Methode auf Einschränkungen. Eine alternative Lösung ergab sich aus einer Empfehlung von https://gist.github.com/PieterScheffers/189cad9510d304118c33135965e9cddb:

SET @uids := null;
UPDATE footable
   SET foo = 'bar'
 WHERE fooid > 5
   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;

Diese Abfrage nutzt die folgenden Schritte:

  1. Eine Variable initialisieren (@uids) auf null.
  2. Verwenden Sie eine UPDATE-Anweisung, um Zeilen zu ändern, die die Kriterien erfüllen, und hängen Sie gleichzeitig ihre fooid-Werte an @uids an, um eine durch Kommas getrennte Liste zu erstellen.
  3. Führen Sie eine SELECT-Anweisung aus um den aktualisierten @uids-Wert abzurufen, der die Liste der aktualisierten Zeilen-Foid-Werte enthält.

Diese Lösung kombiniert effizient sowohl Zeilenaktualisierungen als auch den Abruf und stellt die gewünschte Funktionalität in einer einzigen Abfrage bereit.

Das obige ist der detaillierte Inhalt vonWie erreicht man Zeilenaktualisierungen und -abrufe in einer einzigen MySQL-Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn