根据父类id递归查询所有子节点

1. 创建数据库表

CREATE TABLE `vrv_org_tab` (
  `id` bigint(8) NOT NULL AUTO_INCREMENT,
  `org_name` varchar(50) NOT NULL,
  `org_level` int(4) NOT NULL,
  `org_parent_id` bigint(8) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_org_name` (`org_name`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

2. 添加数据

INSERT INTO vrv_org_tab VALUES ('1', '北信源', '1', '0');
INSERT INTO vrv_org_tab VALUES ('2', '北京', '2', '1');
INSERT INTO vrv_org_tab VALUES ('3', '南京', '2', '1');
INSERT INTO vrv_org_tab VALUES ('4', '武汉', '2', '1');
INSERT INTO vrv_org_tab VALUES ('5', '上海', '2', '1');
INSERT INTO vrv_org_tab VALUES ('6', '北京研发中心', '3', '2');
INSERT INTO vrv_org_tab VALUES ('7', '南京研发中心', '3', '3');
INSERT INTO vrv_org_tab VALUES ('8', '武汉研发中心', '3', '4');
INSERT INTO vrv_org_tab VALUES ('9', '上海研发中心', '3', '5');
INSERT INTO vrv_org_tab VALUES ('10', '北京EMM项目组', '4', '6');
INSERT INTO vrv_org_tab VALUES ('11', '北京linkdd项目组', '4', '6');
INSERT INTO vrv_org_tab VALUES ('12', '南京EMM项目组', '4', '7');
INSERT INTO vrv_org_tab VALUES ('13', '南京linkdd项目组', '4', '7');
INSERT INTO vrv_org_tab VALUES ('14', '武汉EMM项目组', '4', '8');
INSERT INTO vrv_org_tab VALUES ('15', '武汉linkdd项目组', '4', '8');
INSERT INTO vrv_org_tab VALUES ('16', '上海EMM项目组', '4', '9');
INSERT INTO vrv_org_tab VALUES ('17', '上海linkdd项目组', '4', '9');

根据父id递归查询所有子节点
创建函数

create function getChildrenOrg(orgid INT)
returns varchar(4000)
BEGIN
DECLARE oTemp VARCHAR(4000);
DECLARE oTempChild VARCHAR(4000);
 
SET oTemp = '';
SET oTempChild = CAST(orgid AS CHAR);
 
WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempChild);
SELECT GROUP_CONCAT(id) INTO oTempChild FROM vrv_org_tab WHERE FIND_IN_SET(org_parent_id,oTempChild) > 0;
END WHILE;
RETURN oTemp;
END

#查询所有

SELECT * FROM vrv_org_tab;

执行结果:
在这里插入图片描述
#根据父类id查询他的所有子类

SELECT * FROM vrv_org_tab
WHERE FIND_IN_SET(id,getChildrenOrg(2));

执行结果
在这里插入图片描述

发布了23 篇原创文章 · 获赞 1 · 访问量 3146

猜你喜欢

转载自blog.csdn.net/qq_43669912/article/details/95521278