无限级分类原理

很多人在做一些多级别分类的时候,表结构的基本字段设计如下:

id  分类id

parent_id 父类id 

。。。。。


实现无限级分类主要是靠id和parent_id两个字段,parent_id为0表示是顶级分类

相信应该很容易看的懂。

但是这样设计的表结构,有一个硬伤,那就是如果我要取某个节点下面的所有子节点,就必须通过递归来实现了,这样的效率是非常差的

下面提供一种更优的结构,来保证 增加节点、删除节点、查找节点 都以一个相对高效的方式来实现。

实现思路:

在基础的id和parent_id的基础上,再增加一个字段,路径(path),用来存储找到该字段的路径。

例如:

顶级分类:id=1,parent_id=0,path='1'

二级分类:id=2,parent_id=1,path=‘1,2’

三级分类:id=3,parent_id=2,path='1,2,3'


来看一下基本的结构图:

红色表示节点id,框内表示节点路径

无限级分类原理_第1张图片

表结构设计如下:

CREATE TABLE Table_Type
(
 id INTEGER NOT NULL AUTO_INCREMENT,
 parent_id INTEGER,
 node VARCHAR(255),
 PRIMARY KEY (id)
)

这样,假如我们要在ID为7的记录下,插入一条新ID为13的记录,新记录的node就是1,2,7,13
要找一个节点下的所有子节点,就无需用递归,只要一个SQL。
如“查ID为2记录下所有子节点”
select * from Table_Types where node like "1,2,%"
如“删除ID为2记录下所有子节点”
delete from Table_Types where node like "1,2"
即同时删除此节点和它的所有子节点


你可能感兴趣的:(PHP)