路漫漫其修远兮,吾将上下而求索!

PHP二级分类原理

2017-08-16 11:51:15 | 煮梦 | PHP
PHP二级分类原理 前言:大多数网站,都有许多分类,并且这些分类可能包括一级分类和二级分类,甚至更多级的分类。举个例子,一个卖手办的网站,它有大分类:刀剑神域、约会大作战、火影忍者…… 而为了将商品划分的更加明确,可能又会有子分类,比如刀剑神域下面可以有软妹、硬汉、御姐等,其它大分类也是同理。 那么,该如何实现?原理其实还是很简单的,只要搞明白原理,或者说,能够在自己的脑子里,将原理给理清楚,剩下的就简单了,只需要用PHP和mysql,将这些逻辑翻译给计算机和数据库即可。 想实现二级分类,要做的第一件事,当然是建立合理的数据表结构。不需要太多字段,最简单的,三个足以。这三个字段分别是主键、标题,以及索引。而实现二级分类导航的关键,就在这个索引上。 假设主键的名字为mId,而标题为mTitle,索引就叫pId。 之后插入测试数据: 假设有一个一级分类叫“刀剑神域”,而这个刀剑神域有一个子级,叫“亚丝娜”;然后还有一个一级分类,叫“约会大作战”,而这个分类没有子级。如下: 将数据表结构建好之后,第二步便是去实现了。 先来说一说一级结构怎么输出,这一步显然是最简单了,就是最基本的sql查询,然后展示出来即可。当然,这里要说一下,由于上述中,包含父级和我们想要的子级,那么显然全部输出就不合适了,这时候就得用where进行一个筛选。 请注意,上述表中pId的数据,三条数据分别是0、 0、 1。0代表的是一级栏目,而0以外(并不一定全是1),则代表的是二级栏目。关于0以外的数字是什么意思,后面再说。 开始查询。 select * from 表名 where pId=0 使用这段语句,就可以将代表着‘父级’的栏目,给输出出来了。而有了父级之后,我们就可以查询子级了。众所周知,想要输出查询到的数据,需要用到循环,比如说while。 因为每一类子级,是被包含在每一类所针对的父级内的,所以我们在查询子级的时候,是需要将这个查询,放到查询父级的这个循环之中的。这一点,和用JS做多级选项卡,是很相似的。 我们开始查询。 select * from 表名 where pId = mId 为什么pId要等于mId呢?你想啊,上述表中,二级分类是什么?是亚丝娜这个分类,而亚丝娜的索引是多少?是1。前面也说了,亚丝娜属于刀剑神域,那么刀剑神域这个分类的pId是多少?当然是0了,0和1看起来毫无关系,对吧? 没错,0跟1确实一毛钱的关系都没。亚丝娜的索引是1,而它又属于刀剑神域,那么刀剑神域的主键是多少?答案是——1。亚丝娜的索引是1,而刀剑神域的主键也是1,1和1相等吧。 这就说明,亚丝娜是属于刀剑神域的。如果把亚丝娜的索引改为2,那么很显然,亚丝娜就属于主键为2的那个分类了。毕竟我们在sql语句里写名了条件,pId=mId。在这个条件下,只要亚丝娜的pId为1,它就永远不可能等于索引为2或者3的父级。 之后就简单了,再写个while,输出一下就可以了。但请注意,写第二个循环的时候,变量名要与第一个循环有所区别,不然会报错的。 下面放一张成品代码的图:
上一篇 下一篇