1. 程式人生 > 實用技巧 >樹形結構閉包表架構及操作方法

樹形結構閉包表架構及操作方法

資料表

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;

參考連結