ホームページ > データベース > mysql チュートリアル > 数量階層を計算するために MySQL に再帰ストアド プロシージャを実装するにはどうすればよいですか?

数量階層を計算するために MySQL に再帰ストアド プロシージャを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-31 19:23:02
オリジナル
491 人が閲覧しました

How to Implement a Recursive Stored Procedure in MySQL for Calculating Quantity Hierarchy?

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート