PHP与MySQL 无限分类实现的两种方法
发布日期:2016-4-16 11:4:44
PHP与MySQL 无限分类实现的两种方法 无限分类是个老话题了,PHP和MySQL中实现无限分类的思路也有许多种,本文主要介绍其中2种最巧妙的无限分类方法,一起来看看吧。 方法一: 这种方法是一种很常见、很传统的方法,我们先看表结构 表:category id int 主键,自增 name varchar 分类名称 pid int 父类id,默认0 顶级分类的 pid 默认就是0了。当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,考虑到效率的问题不建议每次递归都查询数据库,先将所有分类取出来是通常的做法,保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率。 先来构建一个原始数组,这个直接从数据库中拉出来就行,如图1所示: 图1 目标是将它转化为下面的这种结构 电脑 —笔记本 ——-超级本 ——-游戏本 —台式机 手机 —智能机 —功能机 用数组来表示的话,可以增加一个 children 键来存储它的子分类,如图2所示: 图2 处理过程,如图3所示: 图3 打印结果如下,如图4所示:
方法二: 第二种方法是在表字段中增加一个path字段: 表:category id int 主键,自增 name varchar 分类名称 pid int 父类id,默认0 path varchar 路径 示例数据,如下所示: id name pid path 1 电脑 0 0 2 手机 0 0 3 笔记本 1 0-1 4 超级本 3 0-1-3 5 游戏本 3 0-1-3 path字段记录了从根分类到上一级父类的路径,用id+’-‘表示。 这种方式,假设我们要查询电脑下的所有后代分类,只需要一条sql语句,如下所示: select id,name,path from category where path like (select concat(path,’-‘,id,’%’) as path from category where id=1); 结果: +—-+———–+——-+ | id | name | path | +—-+———–+——-+ | 3 | 笔记本 | 0-1 | | 4 | 超级本 | 0-1-3 | | 5 | 游戏本 | 0-1-3 | +—-+———–+——-+ 这种方式也被很多人所采纳,我总结了下:
转载请注明:玩赚乐 » PHP + MySQL 无限分类实现的2种方法 上一条: mysql显示操作控制的技巧 下一条: 剖析 redis 数据淘汰策略
|