直接點,代碼爲主:html
CREATE TABLE `t_tree` ( `id` int(11) NOT NULL AUTO_INCREMENT, `park_id` int(11) NOT NULL COMMENT '園區id', `parent_id` int(11) NOT NULL COMMENT '父tree的id', `level` int(11) DEFAULT NULL COMMENT '層級', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8
INSERT INTO `t_tree` VALUES (1,1,0,1),(2,1,1,2), (3,1,1,2),(4,1,2,3), (5,1,2,3),(6,1,3,3), (7,1,4,3),(8,1,4,4), (9,1,6,4),(10,1,6,4), (11,1,7,4),(12,2,0,1), (13,2,12,2),(14,2,12,2);
CREATE DEFINER=`root`@`%` PROCEDURE `getNodes`(in tree_id int) BEGIN declare str_tds varchar(1000) default '$'; declare str_treeIds varchar(100); set str_treeIds = cast(tree_id as char); while str_treeIds is not null do set str_tds =concat(str_tds,",",str_treeIds); SELECT GROUP_CONCAT(id) INTO str_treeIds FROM t_tree t WHERE FIND_IN_SET(parent_id, str_treeIds) > 0; end while; SELECT id AS tree_id FROM t_tree WHERE FIND_IN_SET(id, str_tds); END
cast():MySQL提供了CAST()函數,它能夠把一個值轉化爲指定的數據類型
concat():CONCAT(s1,s2...,sn)將s1,s2...,sn鏈接成字符串
group_concat():GROUP_CONCAT(col) 返回由屬於一組的列值鏈接組合而成的結果;
FIND_IN_SET():FIND_IN_SET(str,list)分析逗號分隔的list列表,若是發現str,返回str在list中的位置mysql
call getNodes(2);sql
結果yii
最新開發中使用了mysql存儲過程。上次使用仍是2014年浸會上學的時候,爲了寫這個,真是花了好長時間。最近又從新研究了下。感嘆時間飛逝啊。一轉眼四年了。做爲僞球迷的我,當時仍是大多特的球迷。自從渣叔走了之後,就不多關注多特蒙德了。記念一下僞球迷的青春函數
存儲過程學習學習