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

如何使用递归存储过程计算 MySQL 中树结构的总量?

Barbara Streisand
Barbara Streisand原创
2024-11-03 08:02:30737浏览

How to Calculate Total Quantity Up a Tree Structure in MySQL using a Recursive Stored Procedure?

使用 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 和临时总计的变量。然后它从“测试”表中检索必要的信息。如果父 ID 为空,则该过程将总数设置为当前数量。否则,它会使用父 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中文网其他相关文章!

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