直接点,代码为主:
1.创建表
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
2.插入数据
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);
3.存储过程代码:
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
使用mysql 函数
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中的位置
4.使用存储过程
call getNodes(2);
结果
啰嗦一下:
最新开发中使用了mysql存储过程。上次使用还是2014年浸会上学的时候,为了写这个,真是花了好长时间。最近又重新研究了下。感叹时间飞逝啊。一转眼四年了。作为伪球迷的我,当时还是大多特的球迷。自从渣叔走了以后,就很少关注多特蒙德了。纪念一下伪球迷的青春