id (PK)、parent_id (FK 指向父節點)。lft、rgt 字段,標識深度優先遍歷順序。WHERE lft BETWEEN parent.lft AND parent.rgt,效率極高。父節點 = level = 當前 level - 1 AND lft < 當前 lft AND rgt > 當前 rgt 的節點。
輸入:鄰接表 (id, pid)。輸出:MPTT 表 (id, lvl, lft, rgt),輔助字段 cnt (子樹節點數)、seq (遍歷序號)。
lvl=1, lft=1, rgt=NULL, cnt=NULL, seq=1。lvl = 父 lvl + 1。lvl 向 1 遞減,cnt = SUM(子節點.cnt) + 1。lvl=1 向下,seq = 父.seq + SUM(同級 id < 當前 id 的兄弟.cnt) + 1。lft = seq*2 - lvl,rgt = lft + cnt*2 - 1。WITH RECURSIVE CTE 優雅查詢鄰接表子樹,減弱 MPTT 優勢。