mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类
本方法不易維護,建議取出數(shù)據(jù),在程序中遞歸,例如 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語句塊中,并且必須出現(xiàn)在DEGIN…END語句塊的最前面,即出現(xiàn)在其他語句之前。
DECLARE定義的變量的作用范圍僅限于DECLARE語句所在的BEGIN…END塊內及嵌套在該塊內的其他BEGIN…END塊。即是一個形參。
FIND_IN_SET函數(shù)
函數(shù)定義FIND_IN_SET(str,strlist),其實和in差不多,但這里不能用in,因為要靠這個where來判斷循環(huán)結束的條件呢。
CAST函數(shù)
CAST()函數(shù)的參數(shù)是一個表達式,它包括用AS關鍵字分隔的源值和目標類型。
函數(shù)的創(chuàng)建:create function 函數(shù)名([參數(shù)列表]) returns 數(shù)據(jù)類型
begin
sql語句;
return 值;
end;
函數(shù)的調用:-- 無參調用
select myselect3();
-- 傳參調用
select myselect5("python");
select * from class where id=myselect5("python");
函數(shù)的查看:
查看函數(shù)創(chuàng)建語句:show create function 函數(shù)名;
查看所有函數(shù):show function status [like 'pattern'];
函數(shù)的修改:
函數(shù)的修改只能修改一些如comment的選項,不能修改內部的sql語句和參數(shù)列表。
alter function 函數(shù)名 選項;
函數(shù)的刪除:
drop function 函數(shù)名;
參考:
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
真誠贊賞,手留余香
贊賞
總結
以上是生活随笔為你收集整理的mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔术师发牌问题 java_魔术师发牌问题
- 下一篇: linux cmake编译源码,linu