如何在 MySQL 中使用递归存储过程来计算计算量?

Patricia Arquette
发布: 2024-11-01 07:24:30
原创
707 人浏览过

How Can You Use Recursive Stored Procedures to Calculate Computed Quantities in MySQL?

用于计算计算数量的存储过程递归

在 MySQL 中创建递归存储过程来确定给定项目的计算数量需要了解表结构和递归逻辑。

问题背景

给定一个包含“id”、“parent_id”和“数量”列的表,目标是通过以下方式计算商品的总数量递归遍历其父子关系。例如,第 6 项的计算数量为 240,因为其父项为 5(数量 4)、3(数量 2)和 2(数量 10)。

解决方案:递归存储过程

<code class="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 ;</code>
登录后复制

过程调用

调用存储过程并获取第 6 项的计算数量:

<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255; 

CALL calctotal(6, @total);
SELECT @total;</code>
登录后复制

过程分解

  • 输入和输出参数: IN number 指定起始项,OUT Total 返回计算的数量。
  • 递归逻辑: 检索给定商品的父 ID 和数量并将其存储在 Parent_ID 和 tmptotal 中。如果没有父项(即该项位于根),则总计设置为 tmptotal。否则,以parent_ID作为输入对calctotal进行递归调用,并将结果存储在tmptotal2中。然后计算出的总数为:total = tmptotal2 * tmptotal.
  • 过程调用: 在调用过程之前,必须调整最大递归深度,以避免由于过度递归而产生错误。实际调用以 6 作为输入,计算出的总计存储在变量 @total 中,可以使用 SELECT @total 检索该变量。

以上是如何在 MySQL 中使用递归存储过程来计算计算量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!