父子查询: 根据父 id 查询下面所有子节点数据;子父查询: 根据子 id 查询上面所有父节点数据;
————mysql递归查询
目录结构:
创建表,并添加测试数据
创建表
DROP TABLE IF EXISTS
vrv_org_tab
;
CREATE TABLEvrv_org_tab
(
id
bigint(8) NOT NULL AUTO_INCREMENT,
org_name
varchar(50) NOT NULL,
org_level
int(4) NOT NULL DEFAULT ‘0’,
org_parent_id
bigint(8) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (id
),
UNIQUE KEYunique_org_name
(org_name
)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
添加数据
INSERT INTO
vrv_org_tab
VALUES (‘1’, ‘北信源’, ‘1’, ‘0’);
INSERT INTOvrv_org_tab
VALUES (‘2’, ‘北京’, ‘2’, ‘1’);
INSERT INTOvrv_org_tab
VALUES (‘3’, ‘南京’, ‘2’, ‘1’);
INSERT INTOvrv_org_tab
VALUES (‘4’, ‘武汉’, ‘2’, ‘1’);
INSERT INTOvrv_org_tab
VALUES (‘5’, ‘上海’, ‘2’, ‘1’);
INSERT INTOvrv_org_tab
VALUES (‘6’, ‘北京研发中心’, ‘3’, ‘2’);
INSERT INTOvrv_org_tab
VALUES (‘7’, ‘南京研发中心’, ‘3’, ‘3’);
INSERT INTOvrv_org_tab
VALUES (‘8’, ‘武汉研发中心’, ‘3’, ‘4’);
INSERT INTOvrv_org_tab
VALUES (‘9’, ‘上海研发中心’, ‘3’, ‘5’);
INSERT INTOvrv_org_tab
VALUES (‘10’, ‘北京EMM项目组’, ‘4’, ‘6’);
INSERT INTOvrv_org_tab
VALUES (‘11’, ‘北京linkdd项目组’, ‘4’, ‘6’);
INSERT INTOvrv_org_tab
VALUES (‘12’, ‘南京EMM项目组’, ‘4’, ‘7’);
INSERT INTOvrv_org_tab
VALUES (‘13’, ‘南京linkdd项目组’, ‘4’, ‘7’);
INSERT INTOvrv_org_tab
VALUES (‘14’, ‘武汉EMM项目组’, ‘4’, ‘8’);
INSERT INTOvrv_org_tab
VALUES (‘15’, ‘武汉linkdd项目组’, ‘4’, ‘8’);
INSERT INTOvrv_org_tab
VALUES (‘16’, ‘上海EMM项目组’, ‘4’, ‘9’);
INSERT INTOvrv_org_tab
VALUES (‘17’, ‘上海linkdd项目组’, ‘4’, ‘9’);
select * from vrv_org_tab;
根据父id递归查询所有子节点
创建函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
根据函数查询
根据子id递归查询所有父节点
根据子id查询父节点就不那么麻烦了,不需要写递归函数,当然,你也可以写递归函数来查询。我这边提供的是不写函数的方式。请看代码
写sql语句
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
注意:大家看到那个10000了吗,就是我们的子节点id。
注意:只支持单个查询,意思是不可以根据两个或者两个以上的子节点同时查询出所有父节点。我们可以看到,上面参数都是单个值进行递归查询的。
西面提供一个函数支持多个查询
根据组织机构名称模糊查询所有父节点
该功能常用于组织机构模糊搜索
创建函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
根据函数查询