Heim  >  Artikel  >  Backend-Entwicklung  >  无限分类-总结_PHP教程

无限分类-总结_PHP教程

WBOY
WBOYOriginal
2016-07-14 10:08:01984Durchsuche

   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'].'
';
        }
        
        
        
        
        
        /***********************************
        如果现在需要进行删除操作,同样使用路径
        例如现在要删除雷霆这个分类
        首先根据其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'].'
';
                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');

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477826.htmlTechArticlePHP代码部分: //无限分类-使用路径 //原理:通过路径来进行拆分得到所有想得到的pid以及id,路径是在设计表时的一个字段,包含着从祖先...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn