ホームページ  >  記事  >  データベース  >  再帰ストアド プロシージャを使用して MySQL のツリー構造の合計数量を計算するにはどうすればよいですか?

再帰ストアド プロシージャを使用して MySQL のツリー構造の合計数量を計算するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 08:02:30735ブラウズ

How to Calculate Total Quantity Up a Tree Structure in MySQL using a Recursive Stored Procedure?

MySQL の再帰ストアド プロシージャを使用した合計数量の決定

合計数量を計算する 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 と一時合計の変数を初期化します。次に、「test」テーブルから必要な情報を取得します。親 ID が null の場合、プロシージャは合計を現在の数量に設定します。それ以外の場合は、親 ID を使用して自身を再帰的に呼び出し、それに応じて合計を累積します。

プロシージャを呼び出すには、特定のセッション変数を設定する必要があります。

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

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

「6」を次のように置き換えます。ご希望の ID により、ルート ノード往上から計算された合計数量が提供されます。

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

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