• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-25) 22次浏览 已收录 0个评论
文章目录[隐藏]

<body>

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,

回复内容:

<body>

cat_id cat_name pid cat_pat
类别ID(自增) 类别名称 0(父Id,若为0则是根类别,为自增ID) 路径
请问各位大神,能不能给出最好的方法,直接用跟类别ID 1 查询出下面的所有子类别
数据表如下:

id cat_name @本文来源gaodaimacom搞#代%码@网-搞代gaodaima码 pid cat_path
1 手机 0 ,
2 智能手机 1 ,1,
3 三星 2 ,1,2,
4 三星S系列 3 ,1,2,3,
5 三星M系列 3 ,1,2,3,

这没人回答,有前不久做了相关的工作,把算法给你吧。
思路如下:用一个堆栈来临时保存未处理根节点以及所有其的子节点,不断从堆栈中取一个节点输入,并把其直接子节点,压入堆栈,直到堆栈为空,算法结束。
我已经为你重写了详细的注释,看懂应该不成问题了!

<code>    $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);      //生成查询条件,等待队列中已经包含了所有的子节点</code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数据库无限分类如何用跟类别ID获取该类别下面的全部子类别商品,上表结构
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址