mysql遞歸查詢樹形數據
阿新 • • 發佈:2018-01-28
html http temp 三級 mysql 根節點 blog not null com
新建一張表:
CREATE TABLE `tree` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵‘, `parent_id` int(11) NOT NULL, `name` varchar(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
新建一個function(參考https://jingyan.baidu.com/article/647f01158ee0da7f2148a80b.html):
drop FUNCTION if EXISTS getChildLst; CREATE FUNCTION `getChildLst`(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(id) INTO sTempChd FROM tree where FIND_IN_SET(parent_id,sTempChd)>0; END WHILE; RETURN sTemp; END ;
灌入數據:
id parent_id name
1 0 根節點
2 1 一級節點
3 1 一級節點
4 1 一級節點
5 3 二級節點
6 4 二級節點
7 2 二級節點
8 5 三級節點
9 5 三級節點
10 5 三級節點
11 6 三級節點
12 11 四級節點
13 10 四級節點
查詢id為1的節點的子節點id拼接串:select getChildLst(1));
結果:^,1,2,3,4,5,6,7,8,9,10,11,12,13
查詢樹形數據結果:select * from tree where FIND_IN_SET(id, getChildLst(5));
結果:
id parent_id name
5 3 二級節點
8 5 三級節點
9 5 三級節點
10 5 三級節點
13 10 四級節點
mysql遞歸查詢樹形數據