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

      編輯Tag賺U幣

      推薦:PHP無限分類(樹形類)的深入分析
      本篇文章是對PHP無限分類(樹形類)進行了詳細的分析介紹,需要的朋友參考下

      無限分類是實際開發中經常用到的一種數據結構,一般我們稱之為樹形結構。
      題設:類似淘寶的商品分類,可以在任意分類設置其子類。

      一、創建`type`數據表
      `id` 自增長
      `fid` int(11) 默認(0) ,父節點id
      `name` varchar(50),分類名稱
      復制代碼 代碼如下:www.wf0088.com

      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`)
      )

      二、添加
      我們先添加幾個頂級分類
      復制代碼 代碼如下:www.wf0088.com

      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是代表頂級分類

      接著我們為{電腦}添加幾個個子分類
      復制代碼 代碼如下:www.wf0088.com

      INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '2', '臺式'), (NULL, '2', '筆記本');

      這里fid=2,2這個id是分類{電腦}的id,如果是添加{鞋子}的子分類則fid=3
      同理我們為{筆記本}添加子分類則fid=6
      復制代碼 代碼如下:www.wf0088.com

      INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '6', 'ausu'), (NULL, '6', 'hp');

      三、刪除
      如果我們想刪除{筆記本}這個分類,很簡單
      復制代碼 代碼如下:www.wf0088.com

      DELETE FROM `type` WHERE `id`=6

      {筆記本}的子分類我們也要記得做相應的處理
      復制代碼 代碼如下:www.wf0088.com

      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);//執行操作

      這里你也許你會疑惑為什么那么麻煩用遞歸,而不是直接這樣刪除
      復制代碼 代碼如下:www.wf0088.com

      DELETE FROM `type` WHERE `fid`=6

      這樣我們不就可以直接刪除{ausu}、{hp}?但是假設{ausu}有一個子分類{a1},{a1}也有一個子分類{a2},如果不用遞歸我們就無法徹底刪除數據。

      三、查找
      1.查找{電腦}的子分類
      復制代碼 代碼如下:www.wf0088.com

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

      2.查找{電腦}的所有子分類
      復制代碼 代碼如下:www.wf0088.com

      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的值可能會改變。
      例如查詢屬于{電腦}分類的商品
      復制代碼 代碼如下:www.wf0088.com

      SELECT * FROM `goods` WHERE `tid`=2

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

      分享:優化PHP代碼技巧的小結
      本篇文章是對優化PHP代碼的技巧進行了詳細的總結分析,需要的朋友參考下

      來源:模板無憂//所屬分類:PHP教程/更新時間:2013-06-03
      相關PHP教程