階層数量を計算するための MySQL 再帰ストアド プロシージャ
ここでのタスクには、計算された数量に基づいて再帰的に計算する MySQL のストアド プロシージャを作成することが含まれます。テーブル内の親子関係について。解決策を詳しく見てみましょう。
提供されたストアド プロシージャ宣言は、再帰を使用して特定のノードの合計数量を効果的に計算します。その仕組みは次のとおりです。
プロシージャ宣言:
<code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT) BEGIN</code>
これは、整数値を入力として受け取る calctotal という名前のストアド プロシージャを宣言します。計算された数量として整数の合計を返します。
変数の初期化:
<code class="mysql">DECLARE parent_ID INT DEFAULT NULL; DECLARE tmptotal INT DEFAULT 0; DECLARE tmptotal2 INT DEFAULT 0;</code>
これらの変数は、再帰処理中に中間値を保持するために使用されます。 process.
親 ID と初期数量の取得:
<code class="mysql">SELECT parentid FROM test WHERE id = number INTO parent_ID; SELECT quantity FROM test WHERE id = number INTO tmptotal;</code>
これは、指定された番号の親 ID と初期数量を取得します。
再帰呼び出し処理:
<code class="mysql">IF parent_ID IS NULL THEN SET total = tmptotal; -- The node is a root node, set total to its quantity. ELSE CALL calctotal(parent_ID, tmptotal2); SET total = tmptotal2 * tmptotal; -- Total for current node is product of parent's total and current node's quantity. END IF;</code>
a.親 ID が NULL の場合、ノードがルート ノードであることを意味するため、合計はその数量に等しくなります。
b.それ以外の場合は、親 ID を指定して calctotal を再帰的に呼び出して、親の合計を計算します。次に、この親の合計に現在のノードの数量を乗算して、現在のノードの合計を取得します。
プロシージャ呼び出しの例:
<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255; CALL calctotal(6, @total); SELECT @total;</code>
ストアド プロシージャを使用するには、これらの構成設定を使用して最大再帰の深さを設定する必要があります。その後、適切な番号を指定して calctotal を呼び出すことができます。結果は @total 変数に保存され、後で取得できます。
再帰フロー:
この再帰ストアド プロシージャは、階層数量を計算する便利な方法を提供します。データベーステーブル内の指定された親子関係に基づきます。
以上が再帰ストアド プロシージャを使用して MySQL で階層数量を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。