安阳手机网站制作,招标网站怎么做,关于销售网站建设的短文,检测WordPress恶意代码插件使用php与mysql怎么实现一个无限级分类发布时间#xff1a;2020-12-25 15:25:14来源#xff1a;亿速云阅读#xff1a;84作者#xff1a;Leah本篇文章为大家展示了使用php与mysql怎么实现一个无限级分类#xff0c;内容简明扼要并且容易理解#xff0c;绝对能使你眼前一亮…使用php与mysql怎么实现一个无限级分类发布时间2020-12-25 15:25:14来源亿速云阅读84作者Leah本篇文章为大家展示了使用php与mysql怎么实现一个无限级分类内容简明扼要并且容易理解绝对能使你眼前一亮通过这篇文章的详细介绍希望你能有所收获。项目思路分析一个PHP项目要用到分类但不确定分几级所以就想做成无限级分类。一开始想是按以前一样数据库建4个值如下:id: 自增 | pid: 父类ID | xid: 排序ID | classname: 分类名称后来想到这种在读取数据时和修改时比较不方便而且在产品读取时尤其不便于时改成了以下的方案在Mysql的表中新增了一个字段现数据库如下表名 w_faqclass id: 自增 | pid: 父类ID | xid: 排序ID | classname: 分类名称 | rank: 等级定义一级分类pid 为 0 rank 为/二级分类pid 为 一级分类的idrank 为/一级分类的id/三级分类pid 为 二级分类的idrank 为/一级分类的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($i0; $i$rankArr split(/,$classArr[$i][rank]);$ranknum count($rankArr);$t ;for($j1; $j$t . ├┄┄;}echo .$t.$classArr[$i][classname].;}echo ?//保存时的操作需要判断是否为主分类,当为主类时 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($i0; $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($j1; $j$t . ├┄┄;}if($pid $classArr[$i][id]){$selected selected;}else{$selected ;}echo .$t.$classArr[$i][classname].;}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($zid0)...上述内容就是使用php与mysql怎么实现一个无限级分类你们学到知识或技能了吗如果还想学到更多技能或者丰富自己的知识储备欢迎关注亿速云行业资讯频道。