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!