用于计算数量层次结构的递归存储过程
在像所介绍的需要分层计算的情况下,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中文网其他相关文章!