php 获取商品分类数据库,数据库无限分类如何用跟类别ID获取该类别下面的全部子类别商品,上表结构...

cat_id cat_name pid cat_pat

类别ID(自增) 类别名称 0(父Id,若为0则是根类别,为自增ID) 路径

请问各位大神,能不能给出最好的方法,直接用跟类别ID 1 查询出下面的所有子类别

数据表如下:

id cat_name pid cat_path

1 手机 0 ,

2 智能手机 1 ,1,

3 三星 2 ,1,2,

4 三星S系列 3 ,1,2,3,

5 三星M系列 3 ,1,2,3,

4e30c909ccfd4cf616402e4b65453a23.png

回复内容:

cat_id cat_name pid cat_pat

类别ID(自增) 类别名称 0(父Id,若为0则是根类别,为自增ID) 路径

请问各位大神,能不能给出最好的方法,直接用跟类别ID 1 查询出下面的所有子类别

数据表如下:

id cat_name pid cat_path

1 手机 0 ,

2 智能手机 1 ,1,

3 三星 2 ,1,2,

4 三星S系列 3 ,1,2,3,

5 三星M系列 3 ,1,2,3,

4e30c909ccfd4cf616402e4b65453a23.png

这没人回答,有前不久做了相关的工作,把算法给你吧。

思路如下:用一个堆栈来临时保存未处理根节点以及所有其的子节点,不断从堆栈中取一个节点输入,并把其直接子节点,压入堆栈,直到堆栈为空,算法结束。

我已经为你重写了详细的注释,看懂应该不成问题了!

$waitList = array(); //等待堆栈(数组用做堆栈),未处理的id

array_push($waitList, $_GET["cid"]); //我这是点中某个节点(cid),列出所有子类中的数据

$rsList = array(); //结果队列

while (count($waitList) > 0) { //等待堆栈中还有节点,继续处理

$tmp = array_pop($waitList); //取出一个节点

array_push($rsList, $tmp); //输出这个节点

$dc = M("DocCategory"); //从数据表中找出这个节点的所有子节点

$dcon['pid'] = $tmp;

$dcs = $dc->where($dcon)->field('id')->select();

foreach ($dcs as $value) { //将所有子节点压入等待堆栈

array_push($waitList, $value['id']);

}

}

$con['category'] = array('in', $rsList); //生成查询条件,等待队列中已经包含了所有的子节点

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值