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

前端之家收集整理的这篇文章主要介绍了基于php无限分类的深入理解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

无限分类是实际开发中经常用到的一种数据结构,一般我们称之为树形结构。

<FONT style="COLOR: #ff0000">题设:类似淘宝的商品分类,可以在任意分类设置其子类。


一、创建type数据表

id 自增长
fid int(11) 默认(0) ,父节点id
name varchar(50),分类名称
<div class="codetitle"><a style="CURSOR: pointer" data="30689" class="copybut" id="copybut30689" onclick="doCopy('code30689')"> 代码如下:
<div class="codebody" id="code30689">
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)
)

二、添加

我们先添加几个顶级分类
<div class="codetitle"><a style="CURSOR: pointer" data="22403" class="copybut" id="copybut22403" onclick="doCopy('code22403')"> 代码如下:
<div class="codebody" id="code22403">
INSERT INTO type (id,fid,name) VALUES (NULL,'0','手机');
INSERT INTO type (id,'电脑');
INSERT INTO type (id,'鞋子');
INSERT INTO type (id,'衣服');

这里fid=0是代表顶级分类接着我们为{电脑}添加几个个子分类
<div class="codetitle"><a style="CURSOR: pointer" data="377" class="copybut" id="copybut377" onclick="doCopy('code377')"> 代码如下:
<div class="codebody" id="code377">
INSERT INTO type (id,'2','台式'),(NULL,'笔记本');

这里fid=2,2这个id是分类{电脑}的id,如果是添加{鞋子}的子分类则fid=3
同理我们为{笔记本}添加子分类则fid=6
<div class="codetitle"><a style="CURSOR: pointer" data="39898" class="copybut" id="copybut39898" onclick="doCopy('code39898')"> 代码如下:
<div class="codebody" id="code39898">
INSERT INTO type (id,'6','ausu'),'hp');

三、删除

如果我们想删除{笔记本}这个分类,很简单
<div class="codetitle"><a style="CURSOR: pointer" data="21335" class="copybut" id="copybut21335" onclick="doCopy('code21335')"> 代码如下:<div class="codebody" id="code21335">
DELETE FROM type WHERE id=6

{笔记本}的子分类我们也要记得做相应的处理
<div class="codetitle"><a style="CURSOR: pointer" data="3581" class="copybut" id="copybut3581" onclick="doCopy('code3581')"> 代码如下:<div class="codebody" id="code3581">
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);//执行操作

这里你也许你会疑惑为什么那么麻烦用递归,而不是直接这样删除
<div class="codetitle"><a style="CURSOR: pointer" data="30285" class="copybut" id="copybut30285" onclick="doCopy('code30285')"> 代码如下:<div class="codebody" id="code30285">
DELETE FROM type WHERE fid=6

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

三、查找

<FONT style="COLOR: #ff0000">1.查找{电脑}的子分类
<div class="codetitle"><a style="CURSOR: pointer" data="50175" class="copybut" id="copybut50175" onclick="doCopy('code50175')"> 代码如下:<div class="codebody" id="code50175">
SELECT
FROM type WHERE fid=2

<FONT style="COLOR: #ff0000">2.查找{电脑}的所有子分类
<div class="codetitle"><a style="CURSOR: pointer" data="17063" class="copybut" id="copybut17063" onclick="doCopy('code17063')"> 代码如下:<div class="codebody" id="code17063">
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的值可能会改变。
例如查询属于{电脑}分类的商品
<div class="codetitle"><a style="CURSOR: pointer" data="16399" class="copybut" id="copybut16399" onclick="doCopy('code16399')"> 代码如下:<div class="codebody" id="code16399">
SELECT
FROM goods WHERE tid=2

<FONT style="COLOR: #ff0000">

注:

代码没有运行过可能会有错误,但是思路是正确的,主要的是理解树形结构,而不是记住代码

猜你在找的PHP相关文章