Rumah >pangkalan data >tutorial mysql >Bagaimana Saya Boleh Menggelung Melalui Set Keputusan dalam MySQL?

Bagaimana Saya Boleh Menggelung Melalui Set Keputusan dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-15 13:07:02964semak imbas

How Can I Loop Through Result Sets in MySQL?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn