
mysql树查询,sql递归函数
select cateID from goodscategory where FIND_IN_SET(cateID ,getGoodsChildLst('43242'))
CREATE FUNCTION `getGoodsChildLst`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000)
DECLARE sTempChd VARCHAR(1000)
SET sTemp = '$'
SET sTempChd =cast(rootId as CHAR)
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd)
SELECT group_concat(cateID) INTO sTempChd FROM goodscategory where FIND_IN_SET(parentCateID,sTempChd)>0
END WHILE
RETURN sTemp
END
是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。 汉诺塔问题,是常见可用递归解决的问题,不过也有非递归的解法。菲波纳契数列可用递归定义。以下为求汉诺塔问题的Pascal程序:procedure Hanoi(n:integerx,y,z:char)beginif n<>1 then beginHanoi(n-1,x,z,y)writeln(x,n,z)Hanoi(n-1,y,x,z)else writeln(x,n,z)endend上述程序用接近自然语言的伪代码可表述如下:Hanoi 过程 (整型参数n字符型参数 x,y,z)//注:n 代表本步中要处理的盘子数,x,y,z 分别表示 n 号盘子原来所在柱子、经由柱子、目标柱子开始如果 n 不为 1 ,那么:开始调用 Hanoi 过程 (参数为 n-1,x,z,y)//注:这一步表示用本过程方法将剩余 n-1 个盘子从柱子 x 经由柱子 z 移动到柱子 y输出 x,n,z//注:表示将 n 号盘子从 x 移动到 z调用 Hanoi 过程 (参数为 n-1,y,x,z)//注:这一步表示用本过程方法将剩余 n-1 个盘子从柱子 y 经由柱子 x 移动到柱子 z结束//以上程序段就完成了把 n 个盘子从柱子 x 经由柱子 y 移动到柱子 z否则 输出 x,n,z//注:若 n 为1 的话本句直接输出表示将 n 号盘子从 x 移动到 z结束欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)