国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

基于php無限分類的深入理解

2024-05-04 23:08:17
字體:
來源:轉載
供稿:網友
無限分類是實際開發中經常用到的一種數據結構,一般我們稱之為樹形結構。
題設:類似淘寶的商品分類,可以在任意分類設置其子類。

一、創建`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


注:代碼沒有運行過可能會有錯誤,但是思路是正確的,主要的是理解樹形結構,而不是記住代碼。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临泽县| 康平县| 遵义县| 刚察县| 台北市| 彭阳县| 清徐县| 托里县| 吴忠市| 讷河市| 定日县| 邯郸市| 聂拉木县| 河源市| 永丰县| 肥乡县| 富宁县| 内乡县| 扎鲁特旗| 庆城县| 淳安县| 东兰县| 沧源| 台南市| 南江县| 措勤县| 琼海市| 龙南县| 洪江市| 会泽县| 丰都县| 开阳县| 如东县| 彭阳县| 漠河县| 新巴尔虎右旗| 宜宾市| 砚山县| 桐庐县| 通辽市| 南安市|