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