Heim >Datenbank >MySQL-Tutorial >Wie kann ich Ergebnismengen in MySQL durchlaufen?

Wie kann ich Ergebnismengen in MySQL durchlaufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-15 13:07:02966Durchsuche

How Can I Loop Through Result Sets in MySQL?

Looping über Ergebnismengen in MySQL

In diesem Artikel wird das Konzept des Loopings über Ergebnismengen in MySQL untersucht, eine grundlegende Operation in der Datenbankprogrammierung. Unser Ziel ist es, die Funktionalität des folgenden PHP-Codes zu emulieren:

$result = mysql_query("SELECT something FROM somewhere WHERE some stuff");
while ($row = mysql_fetch_assoc($result)) {
    // check values of certain fields, decide to perform more queries, or not
    // tack it all into the returning result set
}

Cursorbasierter Ansatz

MySQL stellt Cursor zum Durchlaufen von Ergebnismengen bereit. Es fehlen jedoch Funktionen wie die FOR EACH ROW-Syntax für Triggerimplementierungen. Trotzdem ist es möglich, mit dem folgenden Ansatz eine Cursor-basierte Schleife zu erstellen:

SET @S = 1;
LOOP
    SELECT * FROM somewhere WHERE some_conditions LIMIT @S, 1
    -- IF NO RESULTS THEN
    LEAVE
    -- DO SOMETHING
    SET @S = @S + 1;
END LOOP

Gespeicherte Prozedur mit Cursor

Eine strukturiertere Möglichkeit, dies zu implementieren Die Logik erfolgt über eine gespeicherte Prozedur, die einen Cursor verwendet. Hier ist ein Beispiel:

CREATE PROCEDURE GetFilteredData()
BEGIN
  DECLARE bDone INT;

  DECLARE var1 CHAR(16);    -- or approriate type
  DECLARE var2 INT;
  DECLARE var3 VARCHAR(50);
  
  DECLARE curs CURSOR FOR  SELECT something FROM somewhere WHERE some stuff;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;

  DROP TEMPORARY TABLE IF EXISTS tblResults;
  CREATE TEMPORARY TABLE IF NOT EXISTS tblResults  (
    --Fld1 type,
    --Fld2 type,
    --...
  );

  OPEN curs;

  SET bDone = 0;
  REPEAT
    FETCH curs INTO var1, var2, var3;

    IF whatever_filtering_desired
       -- here for whatever_transformation_may_be_desired
       INSERT INTO tblResults VALUES (var1, var2, var3);
    END IF;
  UNTIL bDone END REPEAT;

  CLOSE curs;
  SELECT * FROM tblResults;
END

Überlegungen

Während Cursor bei der Implementierung komplexer Geschäftsregeln hilfreich sein können, haben sie bestimmte Nachteile. Daher wird empfohlen, alternative Methoden in Betracht zu ziehen, beispielsweise die Darstellung der gewünschten Transformationen und Filter in einer einzigen, deklarativen SQL-Abfrage.

Das obige ist der detaillierte Inhalt vonWie kann ich Ergebnismengen in MySQL durchlaufen?. 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