当前位置:首页 > 技术文档 > 正文内容

php无限分类-总结

admin10年前 (2015-05-14)技术文档1832
//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');

分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:http://yuyunhe.cn/index.php/post/41.html

分享给朋友:

“php无限分类-总结” 的相关文章

Win8重装及恢复系统方法

Win8重装及恢复系统方法

Win8重装及恢复系统方法  win8正式版已经发布了一段时间,大家纷纷进行试用,如果操作系统出现问题了怎么办,我们该怎么进行恢复呢?本文就教大家如何重装及恢复win8系统。        首先,我们从屏幕右侧的Charm条进入“更改电脑设置”选项。在“常...

php 获取当前网址

function get_url() {     $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER...

dz中“QQ互联”出现Discuz! Database Error解决办法

dz中“QQ互联”出现Discuz! Database Error解决办法

dz中QQ登陆出现Discuz! Database Error解决办法dz站长朋友相信肯定有人遇到做的QQ互联登录,根本没法用,这让网站的社交登录性能大打折扣,这么解决?下面就看大神的神操作!...

Zend Studio 8打开utf-8文件出现乱码解决方法

Zend Studio 8打开utf-8文件出现乱码解决方法

今天安装了zend studio 8.0.1,运行了一个PHP程序项目(项目文件编码为utf-8),发现utf-8文件中的中文全部变成乱码了,后面终于经过寻找探索,找到了问题所 在:虽然你的项目是UTF-8编码文件,但是当通过zend studio工具运行打开时,是以工具里设定的GBK编码...

phpcms v9更换模板的具体操作方法

phpcms v9更换模板的具体操作方法

这篇文章主要介绍了phpcms v9更换模板的具体操作方法,需要的朋友可以参考下分享一下Phpcms V9更换模板的具体操作方法先分享下大概的步骤:1、上传模版文件到服务器;2、在站点管理 里边【模板风格配置】选择新模板;3、设置不同模型对应模板;4、修改现有的栏目,匹配新模板;5、更新栏目缓存、系...

PHP利用Curl模拟登录并获取数据例子

PHP利用Curl模拟登录并获取数据例子

几乎所有的程序员来模仿用户登录或抓取数据都会使用到curl函数,下面我来给各位介绍利用curl函数实现登录并抓取数据,希望下面例子对各位有帮助。PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下c...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。