上面的设计方案必须预先设定类别树的最大层数以及最大子节点数,不是无限分级,在某些场合并不能采用,那么还有更完美的解决方案吗?通过 google的搜索,我又探索到一种全新的无递归查询,无限分级的编码方案——左右值。原文的程序代码是用php写的,但是通过仔细阅读其数据库表设计说明及相关的sql语句,我彻底弄懂了这种巧妙的设计思路,并在这种设计中新增了删除节点,同层平移的需求(原文只提供了列表及插入子节点的sql语句)。
下面我力图用比较简短的文字,少量图表,及相关核心sql语句来描述这种设计方案:
首先,我们弄一棵树作为例子:
商品
|---食品
| |---肉类
| | |--猪肉
| |---蔬菜类
| |--白菜
|---电器
|--电视机
|--电冰箱
Type_id
|
Name
|
Lft
|
Rgt
|
1
|
商品
|
1
|
18
|
2
|
食品
|
2
|
11
|
3
|
肉类
|
3
|
6
|
4
|
猪肉
|
4
|
5
|
5
|
蔬菜类
|
7
|
10
|
6
|
白菜
|
8
|
9
|
7
|
电器
|
12
|
17
|
8
|
电视机
|
13
|
14
|
9
|
电冰箱
|
15
|
16
|
Type_id
|
Name
|
Lft
|
Rgt
|
2
|
食品
|
2
|
11
|
3
|
肉类
|
3
|
6
|
4
|
猪肉
|
4
|
5
|
5
|
蔬菜类
|
7
|
10
|
6
|
白菜
|
8
|
9
|
Type_id
|
Name
|
Lft
|
Rgt
|
Layer
|
2
|
食品
|
2
|
11
|
2
|
3
|
肉类
|
3
|
6
|
3
|
4
|
猪肉
|
4
|
5
|
4
|
5
|
蔬菜类
|
7
|
10
|
3
|
6
|
白菜
|
8
|
9
|
4
|
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。