mysql无限极分类
对于无限级分类的问题,这里我们使用一种改进前序遍历树的方式来实现。主要解决数据读取上的效率问题。
我们常见的无限分类的做法是通过parent id去寻找分类的归属关系,或者为了查询方便添加path字段以及depth,但是在数据量较大时,想要构建出整棵树的话,在效率上就不大ok了。
所以我们使用一种改进前序遍历树的方式来实现。主要解决数据读取上的效率问题。大概如图所示,数据库中存储的话也是存储node以及node的left,right值,以此来表示node之间的从属关系。
结构如图
表结构
查询:
我们可以通过比较当前节点的右节点和上个节点的右节点来判断是否为父子关系,大致如下:
|
|
结果如下
|
|
插入:
找到其父节点,之后把left和right大于父节点left的节点的左右值加上2,之后再插入本节点,left、right值分别为父节点left+1和+2,可以用一个存储过程来操作:
|
|
删除:
- 得到要删除节点的左右值,并得到他们的差再加一,@mywidth = @rgt - @lft + 1;
- 删除左右值在本节点之间的节点
- 修改条件为大于本节点右值的所有节点,操作为把他们的左右值都减去@mywidth
####存储过程如下:
|
|
雀食!这种方式的增删改都比较繁琐,但是毕竟我们的主要矛盾是查询😁