用於計算數量層次結構的遞歸預存程序
在像所介紹的需要分層計算的情況下,MySQL 中的遞歸預存程序可以提供有效的解決方案。
對於給定的表,其中數量列表示商品的數量,parent_id 列表示其父商品,可以設計一個存儲過程來遞歸計算商品的總數量給定項目,考慮其在層次結構中的所有祖先。
預存程序宣告
以下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 ;
在此預存程序中,number參數表示要計算總數量的商品ID,total輸出參數保存計算結果。
呼叫預存程序
要使用預存程序,設定以下遞迴深度的會話變數至關重要:
SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255;
設定這些變數後,預存程序可以使用以下語句呼叫:
CALL calctotal(6, @total); SELECT @total;
以上是MySQL中的遞歸預存程序如何計算數量層次結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!