ホームページ  >  記事  >  データベース  >  MySQL の再帰ストアド プロシージャはどのように数量階層を計算できますか?

MySQL の再帰ストアド プロシージャはどのように数量階層を計算できますか?

DDD
DDDオリジナル
2024-10-31 22:22:28317ブラウズ

How Can a Recursive Stored Procedure in MySQL Calculate Quantity Hierarchy?

数量階層を計算するための再帰的ストアド プロシージャ

ここで示したような状況で階層計算が必要な場合は、MySQL の再帰的ストアド プロシージャを使用します。

数量列が品目の数量を表し、parent_id 列がその親品目を表す特定のテーブルについて、ストアド プロシージャを作成して、アイテムの合計数量を再帰的に計算できます。指定されたアイテムは、階層内のすべての祖先を考慮して計算されます。

ストアド プロシージャ宣言

次の MySQL ストアド プロシージャ定義では、再帰呼び出しが可能で、合計数量が計算されます。

DELIMITER $$

CREATE PROCEDURE calctotal(
   IN number INT,
   OUT total INT
)

BEGIN

   DECLARE parent_ID INT DEFAULT NULL ;
   DECLARE tmptotal INT DEFAULT 0;
   DECLARE tmptotal2 INT DEFAULT 0;

   SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
   SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     

   IF parent_ID IS NULL
    THEN
    SET total = tmptotal;
   ELSE     
    CALL calctotal(parent_ID, tmptotal2);
    SET total = tmptotal2 * tmptotal;   
   END IF;

END$$

DELIMITER ;

このストアド プロシージャでは、数値パラメーターは合計数量を計算するアイテムの ID を表し、合計出力パラメーターは計算結果を保持します。

ストアド プロシージャの呼び出し

ストアド プロシージャを利用するには、再帰の深さについて次のセッション変数を設定することが重要です。

SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;

これらの変数を設定した後、ストアド プロシージャは次のステートメントを使用して呼び出されます:

CALL calctotal(6, @total);
SELECT @total;

以上がMySQL の再帰ストアド プロシージャはどのように数量階層を計算できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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