侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php+mysql实现无限级分类

php  /  管理员 发布于 7年前   141

项目思路分析:一个PHP项目要用到分类,但不确定分几级,所以就想做成无限级分类。
一开始想是按以前一样,数据库建4个值,如下:
id: 自增   |   pid: 父类ID   |  xid: 排序ID   |  classname: 分类名称
后来想到这种在读取数据时和修改时比较不方便,而且在产品读取时尤其不便,于时改成了以下的方案:
在Mysql的表中新增了一个字段,现数据库如下:
表名 w_faqclass:   id: 自增   |   pid: 父类ID   |  xid: 排序ID   |  classname: 分类名称  |  rank:  等级
定义:
一级分类,pid 为 0 ,rank 为"/"
二级分类,pid 为 一级分类的id,rank 为"/一级分类的id/"
三级分类,pid 为 二级分类的id,rank 为"/一级分类的id/二级分类的id/"
依此类推...
1. 基础函数    

/*利于递归返回已经进行了排序的无限级分类的数组不想用递归的话也可以用 like 来获取后再进行排序,我比较懒,就不写那种获取方式了,其实用 like 更好,推荐用那种方式$datatable    : 数据表名$startid    : 开始父类ID$wheretColumns  :父类列名$xColumns    : 排序列名$xtype      : 排序方式$returnArr    : 返回数组*/function ReadClass($datatable,$startid,$xtype,$returnArr){  $db    =  $datatable;  $sid  =  $startid;  $xtype  =  $xtype;  $lu    =  $returnArr;     $sql  =  "select * from `".$db."` where `pid`='".$sid."' order by xid ".$xtype.";";  $cresult=  mysql_query($sql);  if(mysql_num_rows($cresult)>0){    while($rs = mysql_fetch_array($cresult)){      $lunum = count($lu);      $lu[$lunum]['id']    =  $rs['id'];      $lu[$lunum]['pid']    =  $rs['pid'];      $lu[$lunum]['rank']    =  $rs['rank'];      $lu[$lunum]['classname']=  $rs['classname'];      $lu[$lunum]['xid']    =  $rs['xid']; $lu=  ReadClass($db,$rs['id'],$xtype,$lu);    }  }  return $lu;}/*查询某表中的某个值,只会返回一个值$datatable    : 数据表名$wherevalue    : 条件值$selectColumns  : 查询列名$whereColumns  : 条件列*/function SelectValue($datatable,$wherevalue,$selectColumns,$whereColumns){  $sql  =  "select `".$selectColumns."` from `".$datatable."` where `".$whereColumns."`='".$wherevalue."';";  $result  =  mysql_query($sql);  while($rs = mysql_fetch_array($result)){    return $rs[$selectColumns];  }}

2. 增加分类 (直接做到了select中用于选择 )    

";  echo "";  for($i=0; $i<$canum; $i++){    $rankArr = split("/",$classArr[$i]['rank']);    $ranknum = count($rankArr);    $t = "";    for($j=1; $j<$ranknum; $j++){ //用于格式化显示子类      $t .= "├┄┄";    }    echo "";  }  echo ""?>  //保存时的操作,需要判断是否为主分类,当为主类时, rank 值设为 ///查询父类的 rank 值,用父类的 rank 加上 父类的 id 值if($pid != 0){  $pidrank = SelectValue('w_faqclass',$pid,'rank','id');   $rank = $pidrank.$pid."/";}else{  $rank = "/";  }

3. 修改分类    

";  echo "";   for($i=0; $i<$canum; $i++){    // 因为是修改,所以当前分类不能选择自身或自身以下的分类,多加个 rank 值的优势啊,哈哈,以前做单pid值的时候这里还得用次递归查询    while($ids == $classArr[$i]['id'] || strstr($classArr[$i]['rank'],$rank.$ids."/")){      $i++;    }         $rankArr = split("/",$classArr[$i]['rank']);    $ranknum = count($rankArr);    $t = "";    for($j=1; $j<$ranknum; $j++){      $t .= "├┄┄";    }    if($pid == $classArr[$i]['id']){      $selected = "selected";      }else{      $selected = "";    }    echo "";  }  echo ""?> // 保存时的操作// 要做到改动时该分类的所有子分类rank值都需要变动,选取得原来子分类通用到的 rank 值,也就是该分类的 rank值加上它的ID值// 利于 mysql 的REPLACE语句进行替换if($pid != 0){  $pidrank = SelectValue('w_faqclass',$pid,'rank','id');  $rank = $pidrank.$pid."/";}else{  $rank = "/";  }$orank = SelectValue('w_faqclass',$ids,'rank','id').$ids."/";$nrank = $rank.$ids."/";   mysql_query("UPDATE `w_faqclass` SET rank = REPLACE(rank,'".$orank."','".$nrank."');");mysql_query("UPDATE `w_faqclass` SET `classname`='".$classname."',`xid`='".$xid."',`pid`='".$pid."',`rank`='".$rank."' where `id`='".$ids."';");

4. 删除和查询就简单了,这个就不赘述了,提到一点,记得在删除前确认下该类下面是否存在子类就可以了。

$zid = SelectValue('w_faqclass',$ids,'id','pid'); if($zid>0){  ...}

以上就是php+mysql实现无限极分类的方法,希望对大家的学习有所帮助。

您可能感兴趣的文章:

  • php+mysql实现无限级分类 | 树型显示分类关系
  • php+mysql不用递归实现的无限级分类实例(非递归)
  • jQuery+PHP+MySQL实现无限级联下拉框效果
  • 使用函数递归实现基于php和MySQL的动态树型菜单
  • Php连接及读取和写入mysql数据库的常用代码
  • PHP读取MySQL数据代码
  • php+mysql查询实现无限下级分类树输出示例
  • PHP+MySQL实现无极限分类栏目的方法
  • php+mysql实现无限分类实例详解
  • php+mysql数据库实现无限分类的方法
  • PHP递归写入MySQL实现无限级分类数据操作示例


  • 上一条:
    分享10段PHP常用代码
    下一条:
    2款PHP无限级分类实例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客