基于php无限分类的深入理解


Posted in PHP onJune 02, 2013

无限分类是实际开发中经常用到的一种数据结构,一般我们称之为树形结构。
题设:类似淘宝的商品分类,可以在任意分类设置其子类。
 
一、创建`type`数据表
`id` 自增长
`fid` int(11) 默认(0) ,父节点id
`name` varchar(50),分类名称

CREATE TABLE `type` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL DEFAULT '0',
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

二、添加
我们先添加几个顶级分类
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '手机');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '电脑');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '鞋子');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '衣服');

这里fid=0是代表顶级分类

接着我们为{电脑}添加几个个子分类

INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '2', '台式'), (NULL, '2', '笔记本');

这里fid=2,2这个id是分类{电脑}的id,如果是添加{鞋子}的子分类则fid=3
同理我们为{笔记本}添加子分类则fid=6
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '6', 'ausu'), (NULL, '6', 'hp');

三、删除
如果我们想删除{笔记本}这个分类,很简单
DELETE FROM `type` WHERE `id`=6

{笔记本}的子分类我们也要记得做相应的处理
function del($fid) {
    $sql="SELECT * FROM `type` WHERE `fid`=$fid";
    $rs=mysql_query($sql);    for ($i = 0; $i < count($rs); $i++) {
        $sql="DELETE FROM `type` WHERE `id`={$rs[$i]['id']}";
        mysql_query($sql);
        del($rs['id']);//递归
    }
}
del(6);//执行操作

这里你也许你会疑惑为什么那么麻烦用递归,而不是直接这样删除
DELETE FROM `type` WHERE `fid`=6

这样我们不就可以直接删除{ausu}、{hp}?但是假设{ausu}有一个子分类{a1},{a1}也有一个子分类{a2},如果不用递归我们就无法彻底删除数据。

三、查找
1.查找{电脑}的子分类

SELECT * FROM `type` WHERE `fid`=2

2.查找{电脑}的所有子分类
function sel($fid) {
    $sql="SELECT * FROM `type` WHERE `fid`=$fid";
    $rs=mysql_query($sql);    for ($i = 0; $i < count($rs); $i++) {
        echo $rs[$i]['name'];
        sel($rs[$i]['id']);//递归
    }
}
sel(2);

四、实际数据应用
在数据表添加一个字段`tid`,字段值为记录所属分类`type`表的id。必须是id不能是name,因为name的值可能会改变。
例如查询属于{电脑}分类的商品
SELECT * FROM `goods` WHERE `tid`=2

注:代码没有运行过可能会有错误,但是思路是正确的,主要的是理解树形结构,而不是记住代码。
PHP 相关文章推荐
用PHP创建PDF中文文档
Oct 09 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP-FPM 的管理和配置详解
Feb 17 PHP
Laravel模糊查询区分大小写的实例
Sep 29 PHP
php curl的深入解析
Jun 02 #PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 #PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 #PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 #PHP
php源代码安装常见错误与解决办法分享
May 28 #PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 #PHP
php 深入理解strtotime函数的使用详解
May 23 #PHP
You might like
PHP判断网络文件是否存在的方法
2015/03/12 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python实现rest请求api示例
2014/04/22 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
django模板结构优化的方法
2019/02/28 Python
python中open函数的基本用法示例
2019/09/07 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
python中的django是做什么的
2020/07/31 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
什么是URL
2015/12/13 面试题
支部组织生活会方案
2014/06/10 职场文书
给医院的感谢信
2015/01/21 职场文书
幼儿教师辞职信
2015/02/27 职场文书
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS