php不使用递归实现无限极分类

无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能

1、数据库设计

php不使用递归实现无限极分类_第1张图片

通过上图可以看出pid就是该栏目的父id,而path = 父path+pid;

2、php实现《树形查询》《逆向查询》以及给定栏目id《查询下一级》的方法:

$mysql = new MySQLi('localhost','root','','test');
$mysql->query("set names gb2312");
/**
 * 获取无限分类列表(树形查询) 主要用于后台的栏目列表
 */
$sql = 'select ac_name,concat(path,"-",ac_id) as bpath from article_class order by bpath,ac_id';
$result = $mysql->query($sql);
while($row = $result->fetch_assoc()){
    echo $row['ac_name'].'
'; } echo '
'; /** * 指定分类获取全部的父类(逆向查询) 主要用于编辑文章时获取该文章的相关分类 */ $ac_id = 10; $sqlonly = 'select * from article_class where ac_id='.$ac_id; $resultonly = $mysql->query($sqlonly); $pclass = array(); $curclass = ''; while ($rowonly = $resultonly->fetch_assoc()){ $curclass = $rowonly['ac_name']; $arrpaht = explode('-',$rowonly['path']); $arrpaht = implode(',',$arrpaht); $sqlall = 'select * from article_class where ac_id in ('.$arrpaht.') order by ac_id'; $resultall = $mysql->query($sqlall); while($rowall = $resultall->fetch_assoc()){ $pclass[] = $rowall['ac_name']; } } array_push($pclass,$curclass); echo '
';
    print_r($pclass);
echo '
'; echo '
'; /** * 指定分类获取下一级分类 主要用于展开分类时显示下一级分类使用 */ function getNextClass($ac_id){ global $mysql; $sql = 'select * from article_class where pid='.$ac_id; $resultnext = $mysql->query($sql); while($rownext = $resultnext->fetch_assoc()){ echo $rownext['ac_name'].'
'; } } getNextClass(1);

3、相应的页面效果如下:

php不使用递归实现无限极分类_第2张图片

转载于:https://www.cnblogs.com/longfeiPHP/p/5175545.html

你可能感兴趣的:(php不使用递归实现无限极分类)