无限级分类是一种设计技巧,在开发中经常使用,例如:网站目录、部门结构、文章分类。笔者觉得它在对于设计表的层级结构上面发挥很大的作用,比如大家在一些平台上面,
填写邀请人,它就是一种上下级的关系,上级会有多个下级,下级又会有自己的分支,大多数都是利用递归的思想去实现。话不多说,首先来温故一下递归的实现
递归(程序调用自身的编程技巧):
1、$_GLOBALS[result]
2、static $result
3、参数引用&
举例:遍历1-10
```$i=0;function deeploop( $i ){ global $i; $i++; echo $i; if( $i<10 ){ deeploop($i); }}function deeploop( ){ static $i=0; $i++; echo $i; if( $i<10 ){ deeploop($i); }}function deeploop( &$i=0 ){ $i++; echo $i; if( $i<10 ){ deeploop($i); }}```
一、无限分类实现:
1、表设计设置父id 顶级父id设为0 建立族谱树;每一个分类都需记录它的父级id。( pid=0 代表顶级 )
id pid catename cateorder createtime ( 主键id,父id,分类name,分类排序,创建时间)
举例:网站的分类目录结构;餐饮的分类结构;评论的结构
2、全路径无限分类(以一个字段将所有父级id按顺序记录下来)
id path catename cateorder createtime ( 主键id,逗号分隔的顺序排列父id,分类name,分类排序,创建时间)
优缺点:
全路径查询方便;增加,移动分类时数据维护稍显复杂;
二、举例实现(网站目录):
分类表:
``` #父级Id递归法 CREATE TABLE `deepcate`( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `pid` int(11) NOT NULL DEFAULT 0, `catename` char(25) NOT NULL, `cateorder` int(6) , `createtime` date )ENGINE=INNODB default CHARSET=utf8; //数据 INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'), ( 2,1,'美女',null,'2016-11-01'), ( 3,1,'新闻',null,'2016-11-01'), ( 4,2,'足球宝贝',null,'2016-11-01'), ( 5,2,'日韩明星',null,'2016-11-01'), ( 6,5,'美女写真',null,'2016-11-01'); #全路径 CREATE TABLE `qljcate` ( `id` int(11) NOT NULL, `path` char(255) , `catename` char(25) NOT NULL, `cateorder` int(6), `createtime` date )ENGINE=INNODB default CHARSET=utf8; INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'), ( 2,1,'美女图片',null,'2016-11-01'), ( 3,1,2,'足球宝贝',null,'2016-11-01'), ( 4,1,2,'日韩明星',null,'2016-11-01'), ( 5,1,2,4,'美女写真',null,'2016-11-01'); ```
新闻热点
疑难解答