56,687
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(64) NOT NULL COMMENT '用户名',
`password` varchar(32) NOT NULL COMMENT '密码',
`salt` varchar(64) DEFAULT NULL COMMENT '盐',
`locked` char(1) DEFAULT '0' COMMENT '账号是否锁定,1:锁定,0未锁定',
`parent_id` int(11) DEFAULT '0' COMMENT '上级用户id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(idd int) RETURNS varchar(1000) CHARSET utf8
READS SQL DATA
begin
declare strT varchar(1000);
declare strChildT varchar(1000);
set strT = '$'; /*初始化*/
set strChildT = cast(idd as char); /*凡事需要查找子节点的 父节点都会放到这里*/
while strChildT is not null do
set strT = concat(strT , ',' , strChildT); /*第一次的时候就是: $,idd */
select group_concat(id) into strChildT from sys_user where find_in_set(parent_id,strChildT);
end while;
return strT; /*返回: idd所有子节点的逗号间隔的字符串,包含idd节点本身*/
end$$
然后查询 节点1下面的所有子节点:
select * from tb where find_in_set(id,getChildList(1));