开发的过程当中,我们可能会碰到需要分类的情况,常用的有递归、左右值、路径方式,对比这三种方式的性能,路径方式是最好的,我们下面就讲一下路径方式。
无限分类的三种方式用的都比较多,我们对着三种方式都简单做一下分析,递归的方法:查询慢、更新快、耗内存;左右值:查询快、更新慢、不消耗多少内存;路径方式:查询快、更新快、也不耗内存。当然了这只是我个人的一点简单理解,大家喜欢用那种方式就用那种,毕竟消耗内存也消耗不了多少,慢的话也慢不了多少的。我们下面讲的就是路径方式。
第一步:设计数据库
设计数据库字段只需要设计3个字段即可,自增ID,分类名称,路径,但是为了方便大家更加直观的理解,我们设计5个来实现无限分类,如下
| 自增ID | 分类名字 | 路径 | 上级ID | 级别 |
| id | catename | path | pid | level |
id呢,相信大家都知道是什么意思,整型、主键、自增;
catename,就是分类的名字,字符串;
path,路径呢就是上级id加自己id的组合,如果是顶级分类则是0加自己的id,下面我们就会讲是怎么定义的;
pid,这个也容易理解,就是上级的id;
level,这个也是一样,是这个分类是几级的。
下面我们来添加一条数据,因为表中没有数据,那么添加的肯定是顶级分类了,如下
| 1 | 服装 | 0.1 | 0 | 1 |
看到这条数据,大家就对path有一定的了解了,在比如,我们给服装加个二级分类,男装:
| 2 | 男装 | 0.1.2 | 1 | 2 |
大家现在对path字段是不是有了直观的认识了呢,path到底有什么用呢?如果没有pid和level字段,那么它的作用就有排序、查询下级分类、查询当前分类的级别,我们设计了5个字段,用他做排序就可以了,当然前提是你没有自己定义排序字段。
代码的具体实现我就不给大家写了,这个理解起来也是比较容易的,大家如果能理解,感觉这个跟递归、左右值没什么区别,可以自己实现一下,对比一下,就可以发现它们的区别。