Jür*_*ock 6 mysql recursion stored-procedures
我有下表:
id | parent_id | quantity
-------------------------
1 | null | 5
2 | null | 3
3 | 2 | 10
4 | 2 | 15
5 | 3 | 2
6 | 5 | 4
7 | 1 | 9
Run Code Online (Sandbox Code Playgroud)
现在我需要一个mysql中的存储过程,它以递归方式调用自身并返回计算出的数量.例如,id 6具有5作为父亲,其中3作为父亲,其中2作为父亲.所以我需要计算4 * 2 * 10 * 3(= 240)作为结果.
我对存储过程相当新,我将来不会经常使用它们,因为我更喜欢在程序代码中使用业务逻辑而不是在数据库中.但在这种情况下,我无法避免它.
也许一个mysql大师(就是你)可以在几秒钟内完成一个工作语句.
Hai*_*vgi 22
它的工作只在mysql版本> = 5
存储过程声明是这样的,
你可以给它一点改进,但这工作:
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 ;
Run Code Online (Sandbox Code Playgroud)
调用就像(设置此变量很重要):
SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;
CALL calctotal(6, @total);
SELECT @total;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26132 次 |
| 最近记录: |