本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654
代码如下:
delimiter / DROP FUNCTION IF EXISTS `getChild` / CREATE FUNCTION `getChild`(rootId INT) RETURNS VARCHAR(1000) BEGIN DECLARE ptemp varchar(1000); DECLARE ctemp varchar(1000); SET ptemp = '#'; SET ctemp =cast(rootId as CHAR); WHILE ctemp is not null DO SET ptemp = concat(ptemp,',',ctemp); SELECT group_concat(id) INTO ctemp FROM tp_item_category WHERE FIND_IN_SET(parent_id,ctemp)>0; END WHILE; RETURN ptemp; END; SELECT * FROM tp_item_category WHERE FIND_IN_SET(parent_id, getChild(1))
DECLARE(定义一个临时变量)
DECLARE语句必须用在BEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前。
DECLARE定义的变量的作用范围仅限于DECLARE语句所在的BEGIN…END块内及嵌套在该块内的其他BEGIN…END块。即是一个形参。
FIND_IN_SET函数
函数定义FIND_IN_SET(str,strlist),其实和in差不多,但这里不能用in,因为要靠这个where来判断循环结束的条件呢。
CAST函数
CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标类型。
函数的创建:
create function 函数名([参数列表]) returns 数据类型 begin sql语句; return 值; end;
函数的调用:
-- 无参调用 select myselect3(); -- 传参调用 select myselect5("python"); select * from class where id=myselect5("python");
函数的查看:
查看函数创建语句:show create function 函数名;
查看所有函数:show function status [like 'pattern'];
函数的修改:
函数的修改只能修改一些如comment的选项,不能修改内部的sql语句和参数列表。
alter function 函数名 选项;
函数的删除:
drop function 函数名;
参考:
https://www.mysqlzh.com/
https://www.cnblogs.com/progor/p/8871480.html
https://www.cnblogs.com/chywx/p/9420726.html
https://www.jianshu.com/p/f99665266bb1
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。