好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.
目录
概括
在实际使用中,通过父级ID查询下面所有子集的业务需求,同时也会有通过子集ID查询上级父级的ID信息。
表结构如下
以部门结构表为例
CREATE TABLE m_sys_dept (
dept_id int NOT NULL AUTO_INCREMENT COMMENT '主键id',
name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '部门名称',
parent_id bigint DEFAULT '0' COMMENT '父id',
sort int NOT NULL DEFAULT '0' COMMENT '排序',
PRIMARY KEY (dept_id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部门管理';
通过父级ID查询子集的业务SQL
SELECT a.* FROM (SELECT * FROM m_sys_dept WHERE del_flag = 0) a ,
(SELECT @pcode := 42384) b
WHERE FIND_IN_SET(parent_id, @pcode) > 0
AND @pcode := concat(@pcode, ',', dept_id)
union select * from m_sys_dept where dept_id = 42384 ;
42384 是要填入的节点ID
通过子集ID查询父级的ID信息
WITH RECURSIVE parent_nodes AS (
SELECT * FROM m_sys_dept WHERE dept_id = 731466 -- 子节点的id
UNION ALL
SELECT n.* FROM m_sys_dept n
JOIN parent_nodes p ON p.parent_id = n.dept_id
)
SELECT * FROM parent_nodes;
731466 是子节点的ID