前序二叉树菜单
添加
参数: p_id, p_lft, p_rgt
(1) p_id > 0
新增数据 lft = #{p_rgt}, rgt = #{p_rgt} + 1 ; 返回 id ;
1. 所有 lft > #{p_rgt} 的数据,lft + 2 ;
2. 所有 rgt >= #{p_rgt} and id != #{id} 的数据,rgt + 2 ;
(2) p_id == 0
查询当前最大rgt:rgt
添加数据:lft = #{rgt} + 1, rgt = #{rgt} + 2
删除
参数:删除行的 pid, lft, rgt
删除数据 lft >= #{lft} , rgt <= #{rgt} ;
1. 所有 lft > #{lft} 的数据,lft - {#{rgt} - #{lft} + 1} ,
2. 所有 rgt > #{rgt} 的数据,rgt - {#{rgt} - #{lft} + 1} ;
同级上移
参数:当前级的 lft , rgt
获取到同级上一个: where rgt = #{lft} - 1 ; 得到 pre_lft , pre_rgt ;
1. 所有 lft >= #{lft} and rgt <= #{rgt} 的数据,获取到 id_List ;
lft - ( #{pre_rgt} - #{pre_lft} + 1)
rgt - ( #{pre_rgt} - #{pre_lft} + 1)
2. 所有 lft >= #{pre_lft} and rgt <= #{pre_rgt} 的数据,获取到 id_List ;
lft + ( #{rgt} - #{lft} + 1)
rgt + ( #{rgt} - #{lft} + 1)
同级下移
参数:当前级的 lft , rgt
获取到同级下一个: where lft = #{rgt} + 1 ; 得到 next_lft , next_rgt ;
1. 所有 lft >= #{lft} and rgt <= #{rgt} 的数据,获取到 id_List ;
lft + ( #{next_rgt} - #{next_lft} + 1)
rgt + ( #{next_rgt} - #{next_lft} + 1)
2. 所有 lft >= #{next_lft} and rgt <= #{next_rgt} 的数据,获取到 id_List ;
lft - ( #{rgt} - #{lft} + 1)
rgt - ( #{rgt} - #{lft} + 1)