数量階層を計算するための再帰的ストアド プロシージャ
ここで示したような状況で階層計算が必要な場合は、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 サイトの他の関連記事を参照してください。