树形结构闭包表架构及操作方法

数据表

dept 部门表

  • ID 主键
  • parent_id 父ID
  • name 部门名称

dept_path 部门路径表

  • parent_id 父ID 联合主键
  • son_id 子ID 联合主键

数据结构

操作

新增节点 12 到 7 下

INSERT INTO b_dept_path(parent_id, son_id)
  SELECT d.parent_id, 12
  FROM b_dept_path AS d
  WHERE d.son_id = 7
  UNION ALL
  SELECT 12, 12

删除节点3

  • 删除节点3及其子节点的路径关系记录
DELETE FROM b_dept_path WHERE son_id IN (SELECT son_id FROM b_dept_path WHERE parent_id = 3)

移动节点4 到 节点6下

  • 第一步删除 "节点4及其子节点" 与 "节点4父节点"的关系 保留 "节点4" 与 "其子节点的关系"
DELETE FROM b_dept_path WHERE parent_id IN (SELECT parent_id FROM b_dept_path WHERE son_id = 4) AND son_id IN (SELECT son_id FROM b_dept_path WHERE parent_id = 4) and parent_id != 4;
INSERT INTO b_dept_path(parent_id, son_id)
SELECT
    p.parent_id,
    s.son_id
FROM
    b_dept_path p
    CROSS JOIN b_dept_path s
WHERE
    p.son_id = 6
    AND s.parent_id = 4;

参考链接

原文地址:https://www.cnblogs.com/yanzhen/p/14150658.html