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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 07:24:30707ブラウズ

How Can You Use Recursive Stored Procedures to Calculate Computed Quantities in MySQL?

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

特定の項目の計算数量を決定するために MySQL で再帰ストアド プロシージャを作成するには、テーブル構造と再帰ロジックを理解する必要があります。

問題背景

列「id」、「parent_id」、および「quantity」を持つテーブルが与えられた場合、目標は、親子関係を再帰的にたどることにより、アイテムの合計数量を計算することです。たとえば、項目 6 の親が 5 (数量 4)、3 (数量 2)、2 (数量 10) であるため、項目 6 の計算数量は 240 になります。

解決策: 再帰ストアド プロシージャ

<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>

手順呼び出し

ストアド プロシージャを呼び出し、品目 6 の計算数量を取得するには:

<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255; 

CALL calctotal(6, @total);
SELECT @total;</code>

プロシージャの内訳

  • 入力パラメータと出力パラメータ: IN 番号は開始パラメータを指定します。
  • 再帰ロジック: 指定された項目の親 ID と数量が取得され、parent_ID と tmptotal に保存されます。親がない場合 (つまり、項目がルートにある場合)、合計は tmptotal に設定されます。それ以外の場合は、parent_ID を入力として calctotal への再帰呼び出しが行われ、結果が tmptotal2 に格納されます。計算された合計は total = tmptotal2 * tmptotal として計算されます。
  • プロシージャ呼び出し: プロシージャを呼び出す前に、過剰な再帰によるエラーを避けるために最大再帰深さを調整する必要があります。実際の呼び出しでは入力として 6 を受け取り、計算された合計は変数 @total に保存されます。これは SELECT @total.
を使用して取得できます。

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

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