程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 無限分類-總結

無限分類-總結

編輯:關於PHP編程

   PHP代碼部分:     //無限分類-使用路徑         //原理:通過路徑來進行拆分得到所有想得到的pid以及id,路徑是在設計表時的一個字段,包含著從祖先id到父id的一系列id         //該方法,不論查看或者是刪除等其他操作,都只需要執行一次sql語句就能夠達到想要的效果         //該種方法也是本人比較喜歡的使用的啦,因為我的原則是能夠不使用遞歸,就堅決不用遞歸         $link=mysql_connect('localhost','username,'password');         if(mysql_errno()){             echo '數據庫連接失敗:'.mysql_error();         }         mysql_select_db('db_kind');         mysql_set_charset('utf8');         //concat(),連接字符串成一個新字符串         //下面的代碼完成一個無限分類的現實         $sql="select concat(path,'-',id) as conpath,id,name,path from wx_kind order by conpath";         $result=mysql_query($sql);         while($row=mysql_fetch_assoc($result)){             $arr=array();             //這裡可以選擇對path字段或者新組成的conpath字段來進行字符串的拆分             //對於explode()函數注意一點,無論要拆分的字符串是否包含使用參數的字符,都至少返回包含一個元素的數組             $count=count(explode('-',$row['path']))-1;             //str_repeat(),對字符串進行重復,主要是為了格式看的比較清楚             $str=str_repeat('        ',$count);             echo $str.$id.'=>'.$row['name'].'<hr/>';         }                                                      /***********************************         如果現在需要進行刪除操作,同樣使用路徑         例如現在要刪除雷霆這個分類         首先根據其id找到路徑         **************************************/         /* $sql1="select id,path from wx_kind where id=20";         $result1=mysql_query($sql1);         $row=mysql_fetch_assoc($result1);         $id=$row['id'];         $path=$row['path'];         //構造出以該分類作為父類或者祖先分類的所有path         $new_path=$path.'-'.$id;         //下面就可以進行刪除動作了         $sql2="delete from wx_kind where id={$id} or path like '{$new_path}%'";         $result2=mysql_query($sql2);         if($result2 && mysql_affected_rows()){             echo '刪除成功!';         }else{             echo '刪除失敗!';         } */                           /*****************************************************/         //使用遞歸函數的方法,不解釋那麼多了,直接看代碼吧,主要就是查找的方式不一樣         function display_classify($pid=0,$num=0){             $sql="select id,name from wx_kind where pid={$pid}";             $result=mysql_query($sql);             while($row=mysql_fetch_assoc($result)){                 $id=$row['id'];                 $str=str_repeat('        ',$num);                 echo $str.$id.'=>'.$row['name'].'<hr/>';                 display_classify($id,$num+1,$sid);             }         }         //display_classify();                           /*****************************************************/         //以下就是刪除的方法了,慢慢看吧主要就是下面說的刪除時的順序,和應該在哪進行刪除要注意一下         function del_classify($id){             //先使用遞歸來找出已該id為父id或祖先id的所有的子分類,然後依次從裡到外進行刪除操作,注意刪除時的順序             $sql="select id,name from wx_kind where pid={$id}";             $result=mysql_query($sql);             while($row=mysql_fetch_assoc($result)){                 $id=$row['id'];                 del_classify($id);             }             //刪除操作在循環外執行             $sql1="delete from wx_kind where id={$id}";             //直接進行刪除,而不是任何提示             $result=mysql_query($sql1);             if(!($result && mysql_affected_rows())){                 $bool=false;             }else{                 $bool=true;             }             return $bool;         }         //del_classify(5);          以下是數據庫代碼:     --      -- 數據庫: `db_kind`     --           -- --------------------------------------------------------          --      -- 表的結構 `wx_kind_dump`     --           CREATE TABLE `wx_kind_dump` (       `id` int(11) NOT NULL auto_increment,       `pid` int(11) NOT NULL,       `name` char(40) NOT NULL,       `path` char(40) NOT NULL,       PRIMARY KEY  (`id`)     ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;          --      -- 導出表中的數據 `wx_kind_dump`     --           INSERT INTO `wx_kind_dump` VALUES (1, 0, '新聞', '0');     INSERT INTO `wx_kind_dump` VALUES (2, 0, '視頻', '0');     INSERT INTO `wx_kind_dump` VALUES (3, 0, '圖片', '0');     INSERT INTO `wx_kind_dump` VALUES (4, 0, '讀書', '0');     INSERT INTO `wx_kind_dump` VALUES (5, 1, '政治新聞', '0-1');     INSERT INTO `wx_kind_dump` VALUES (6, 1, '財經新聞', '0-1');     INSERT INTO `wx_kind_dump` VALUES (7, 1, '娛樂新聞', '0-1');     INSERT INTO `wx_kind_dump` VALUES (8, 1, '體育新聞', '0-1');     INSERT INTO `wx_kind_dump` VALUES (9, 8, '籃球', '0-1-8');     INSERT INTO `wx_kind_dump` VALUES (10, 8, '足球', '0-1-8');     INSERT INTO `wx_kind_dump` VALUES (11, 8, 'F1', '0-1-8');     INSERT INTO `wx_kind_dump` VALUES (12, 8, '網球', '0-1-8');     INSERT INTO `wx_kind_dump` VALUES (13, 9, '國際籃球', '0-1-8-9');     INSERT INTO `wx_kind_dump` VALUES (14, 9, 'CBA', '0-1-8-9');     INSERT INTO `wx_kind_dump` VALUES (15, 9, 'CUBA', '0-1-8-9');     INSERT INTO `wx_kind_dump` VALUES (16, 9, 'NBA', '0-1-8-9');     INSERT INTO `wx_kind_dump` VALUES (17, 9, 'NCAA', '0-1-8-9');     INSERT INTO `wx_kind_dump` VALUES (18, 16, '熱火', '0-1-8-9-16');     INSERT INTO `wx_kind_dump` VALUES (19, 16, '湖人', '0-1-8-9-16');     INSERT INTO `wx_kind_dump` VALUES (20, 16, '雷霆', '0-1-8-9-16');     INSERT INTO `wx_kind_dump` VALUES (21, 16, '凱爾特人', '0-1-8-9-16');     INSERT INTO `wx_kind_dump` VALUES (22, 18, 'James', '0-1-8-9-16-18');     INSERT INTO `wx_kind_dump` VALUES (23, 18, 'Wade', '0-1-8-9-16-18');     INSERT INTO `wx_kind_dump` VALUES (24, 20, 'KD', '0-1-8-9-16-20');     INSERT INTO `wx_kind_dump` VALUES (25, 20, 'WS', '0-1-8-9-16-20');

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved