首页  >  文章  >  数据库  >  MySQL中的递归存储过程如何计算数量层次结构?

MySQL中的递归存储过程如何计算数量层次结构?

DDD
DDD原创
2024-10-31 22:22:28317浏览

How Can a Recursive Stored Procedure in MySQL Calculate Quantity Hierarchy?

用于计算数量层次结构的递归存储过程

在像所介绍的需要分层计算的情况下,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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn