mysql 存储过程
直接点,代码为主:
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年浸会上学的时候,为了写这个,真是花了好长时间。最近又重新研究了下。感叹时间飞逝啊。一转眼四年了。作为伪球迷的我,当时还是大多特的球迷。自从渣叔走了以后,就很少关注多特蒙德了。纪念一下伪球迷的青春
5.参考学习
相关推荐
Omega 2020-08-16
zjyzz 2020-08-16
minggehenhao 2020-07-28
zhaojp0 2020-06-27
zjuwangleicn 2020-06-25
wenjieyatou 2020-06-17
liaomingwu 2020-06-16
hungzz 2020-06-16
muzirigel 2020-06-14
gsmfan 2020-06-14
ncomoon 2020-06-14
xiaobaif 2020-06-13
Rain 2020-06-12
hanshangzhi 2020-06-12
talkingDB 2020-06-12
IBMRational 2020-06-09
snowguy 2020-06-01