//php代码部分 <?php header('Content-Type:text/html;charset=utf-8'); error_reporting(0); //无限分类-使用路径 //原理:通过路径来进行拆分得到所有想得到的pid以及id,路径是在设计表时的一个字段,包含着从祖先id到父id的一系列id //该方法,不论查看或者是删除等其他操作,都只需要执行一次sql语句就能够达到想要的效果 //该种方法也是本人比较喜欢的使用的啦,因为我的原则是能够不使用递归,就坚决不用递归 $link=mysql_connect('localhost','root','123456'); 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_dump order by conpath"; $result=mysql_query($sql); while($row=mysql_fetch_assoc($result)or die(mysql_error())){ $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');