数量階層を計算するための再帰的ストアド プロシージャ
MySQL では、ネストされた階層構造の数量を計算するための再帰的ストアド プロシージャを作成するのが困難です。慎重に作成された手順を使用することで克服できます。指定されたテーブルについて考えます。各行は、関連する数量と潜在的な親を持つアイテムを表します。
再帰ストアド プロシージャ
このツリー状の構造を再帰的に走査し、計算するには合計数量に応じて、次のストアド プロシージャを実装できます:
<code class="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 ;</code>
プロシージャの実行
再帰を有効にするには、MySQL 設定を調整することが重要です:
<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255;</code>
これらの設定を構成すると、ストアド プロシージャは次のように呼び出すことができます:
<code class="mysql">CALL calctotal(6, @total); SELECT @total;</code>
再帰計算の例
指定されたサンプル データの場合、ここで、項目 6 は項目 5 の子であり、項目 5 は項目 3 の子であるというように、ストアド プロシージャは次のように合計数量を再帰的に計算します。
4 * 2 * 10 * 3 = 240
したがって、番号 = 6 のプロシージャは 240 になります。
以上が数量階層を計算するために MySQL に再帰ストアド プロシージャを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。