基於php無限分類的深入理解_php執行個體

來源:互聯網
上載者:User
無限分類是實際開發中經常用到的一種資料結構,一般我們稱之為樹形結構。
題設:類似淘寶的商品分類,可以在任意分類設定其子類。
 
一、建立`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

註:代碼沒有運行過可能會有錯誤,但是思路是正確的,主要的是理解樹形結構,而不是記住代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.