ホームページ >データベース >mysql チュートリアル >MySQL で結果セットをループするにはどうすればよいですか?

MySQL で結果セットをループするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-15 13:07:02964ブラウズ

How Can I Loop Through Result Sets in MySQL?

MySQL での結果セットのループ

この記事では、データベース プログラミングの基本操作である、MySQL での結果セットのループの概念について説明します。次の PHP コードの機能をエミュレートすることを目的としています。

$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
}

カーソルベースのアプローチ

MySQL は、結果セットを反復処理するためのカーソルを提供します。ただし、トリガー実装用の FOR EACH ROW 構文などの機能がありません。それにもかかわらず、次のアプローチを使用してカーソルベースのループを作成することができます:

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

カーソルを使用したスト​​アド プロシージャ

これを実装するためのより構造化された方法ロジックはカーソルを使用するストアド プロシージャを通じて行われます。以下に例を示します。

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

考慮事項

カーソルは複雑なビジネス ルールの実装に役立ちますが、いくつかの欠点もあります。したがって、必要な変換とフィルターを単一の宣言型 SQL クエリで表現するなど、代替方法を検討することをお勧めします。

以上がMySQL で結果セットをループするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。