>  기사  >  php教程  >  无限分类-总结

无限分类-总结

WBOY
WBOY원래의
2016-06-13 10:54:041436검색

   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');

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.