预排序树实现无限极分类
概念
- 左右值无限级分类,也称为预排序树无限级分类
- 是一种有序的树状结构
- 于这些树状结构中的每一个节点都有一个 左值 和 右值
规则
- 每一个 后代节点 的 左值 > 父节点 的 左值
- 每一个 后代节点 的 右值 < 父节点的 右值
- 每一个节点的 右值 > 左值
新增节点
新增顶级分类
- 获取该树中 最大右值;
- 左值 = 最大右值 + 1;
- 右值 = 最大右值 + 2;
新增子节点
- 首先获取 父节点右值
1 |
|
新增节点左值 = 父节点右值
新增节点右值 = 新增节点左值 + 1
删除节点
获取删除节点的左右值 $lft, $rgt
删除该节点以及所有后代节点
1 |
|
更新左右值
1 |
|
数据准备
1 |
|
获取所有后代节点
1 |
|
计算后代数量
后代的数量 = (右值 - 左值 - 1) / 2。
减少1的原因是排除该节点本身
判断叶子节点
右值 - 左值 = 1
获取叶子节点
1 |
|
检索单一路径
1 |
|
检索分类深度
1 |
|
检索某个节点的子节点(不包含后代节点)
1 |
|
总结
我们看到上边的获取深度 和 检索某个节点的子节点实现上用到了子查询,sql语句很复杂.
所以我的解决办法是在数据结构上增加 深度 和 父id 两个字段
因为分类是前台页面操作人员操作的, 也就是说操作的时候就知道深度, 每次新增时候将 深度 和 父id 带上就可以方便的解决复杂sql语句的问题;
预排序树实现无限极分类
https://randzz.cn/050157d572cb/预排序树实现无限极分类/