Looping Over Result Sets dalam MySQL
Artikel ini meneroka konsep gelung atas set hasil dalam MySQL, operasi asas dalam pengaturcaraan pangkalan data. Kami berhasrat untuk mencontohi kefungsian kod PHP berikut:
$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 }
Pendekatan Berasaskan Kursor
MySQL menyediakan kursor untuk lelaran ke atas set hasil. Walau bagaimanapun, ia tidak mempunyai keupayaan seperti FOR EACH ROW sintaks untuk pelaksanaan pencetus. Walaupun begitu, adalah mungkin untuk mencipta gelung berasaskan kursor menggunakan pendekatan berikut:
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
Prosedur Tersimpan dengan Kursor
Cara yang lebih berstruktur untuk melaksanakan ini logik adalah melalui prosedur tersimpan yang menggunakan kursor. Berikut ialah contoh:
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
Pertimbangan
Walaupun kursor boleh membantu untuk melaksanakan peraturan perniagaan yang kompleks, ia mempunyai kelemahan tertentu. Oleh itu, adalah disyorkan untuk mempertimbangkan kaedah alternatif, seperti menyatakan transformasi dan penapis yang diingini dalam satu pertanyaan SQL deklaratif.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Menggelung Melalui Set Keputusan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!