您好,欢迎访问一九零五行业门户网

php+mysql实现无限级分类_PHP

项目思路分析:一个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中用于选择 )
<?php $classarr = readclass('w_faqclass','0','asc',array()); $canum = count($classarr); echo ; echo 主分类; for($i=0; $i<$canum; $i++){ $rankarr = split(/,$classarr[$i]['rank']); $ranknum = count($rankarr); $t = ; for($j=1; $j //保存时的操作,需要判断是否为主分类,当为主类时, rank 值设为 ///查询父类的 rank 值,用父类的 rank 加上 父类的 id 值if($pid != 0){ $pidrank = selectvalue('w_faqclass',$pid,'rank','id'); $rank = $pidrank.$pid./;}else{ $rank = /; }
3. 修改分类
<?php /* 注意,因为是修改,在此页面加载时已将当前分类的所有值读出来了,对应是:$pid,$rank */ $classarr = readclass('w_faqclass','0','asc',array()); $canum = count($classarr); echo ; echo 主分类; for($i=0; $i0){ ...}
以上就是php+mysql实现无限极分类的方法,希望对大家的学习有所帮助。
其它类似信息

推荐信息