-
php 无穷分类
添加时间:2013-5-29 点击量:无穷分类是实际开辟中经常用到的一种数据布局,一般我们称之为树形布局。
题设:类似淘宝的商品分类,可以在随便率性分类设置其子类。
一、创建`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
注:代码没有运行过可能会有错误,然则思路是正确的,首要的是懂得树形布局,而不是记住代码。
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。