前言
平常我们在开发难免会遇到树形结构的表结构,今天我们针对树形结构在Mysql 中两个查询需求做个总结,以及查询sql 具体分析
简单树形建表
CREATE TABLE `tb_tree` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`code_num` BIGINT(20) DEFAULT NULL,
`parent_code_num` BIGINT(20) DEFAULT NULL,
`code_name` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='树形分类';
树形关系图
需求以及分析
一、 指定节点获取该节点的所有上级节点
Mysql 查询
-- 获取指定节点的所有父节点
SELECT
T2.code_num,
T2.code_name
FROM
(SELECT
@r AS _id,
(SELECT
@r := parent_code_num
FROM
tb_tree
WHERE code_num = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT
@r := 1,
@l := 0) vars,
tb_tree h) T1
JOIN tb_tree T2
ON T1._id = T2.code_num
ORDER BY T1.lvl DESC
效果图
二、 指定节点获取该节点的所有孩子节点
Mysql 查询
SELECT
code_num AS codeNum
FROM
(SELECT
id,
parent_code_num,
code_num
FROM
tb_tree) T1,
(SELECT
@pid := 1) T2
WHERE FIND_IN_SET(parent_code_num, @pid) > 0
AND @pid := CONCAT(@pid, ',', code_num) ;