当前位置:Gxlcms > PHP教程 > 紧急啊.我被递归给郁闷死了.请大家帮我一下

紧急啊.我被递归给郁闷死了.请大家帮我一下

时间:2021-07-01 10:21:17 帮助过:48人阅读

首先.我的[栏目]表结构是这样的
id uid titile class
1 0 首页 url
2 0 新闻 news
3 0 产品 url
4 3 科技产品 product
5 4 电脑 product

现在的问题的 我想做一下 无限级的下拉框

用递归的方法,可以实现 where uid = 0 开始循环 然后 get_str($row['id']); 递归


但是问题来了. 因为我的栏目 有一个CLASS字段 表示栏目类型...url表示外部链接 news表示新闻 product表示产品栏目

一级产品首先是一个外部链接类型的..他的下级栏目 是产品类型的
我在后台发布产品的时候.选择归属栏目的时候..............应该只把 class=prodcut和他的下级全部显示出来
那么我用递归的方法 在SQL加上条件语句 where class='product'

这样的话 没办法往下递归啊...... 因为这个条件 如果不递归的话 就显示 科技产品 电脑

我在网上找的归递代码 都是UID 从 0开始的..........如果我 where class='product' 加上这个条件 那么科技产品的UID是3或者是其它数字 比如56789 也可能是0

这样就没办法递归啊...直接什么也不显示了...有什么好法方吗? 不知道我说的清不清楚.


回复讨论(解决方案)

列出 class=prodcut和他的下级 时,就不是从 where uid = 0 开始了
对你示例的数据就是从 where uid = 3 开始

所以你应该先获得起点的 id,然后再递归

列出 class=prodcut和他的下级 时,就不是从 where uid = 0 开始了
对你示例的数据就是从 where uid = 3 开始

所以你应该先获得起点的 id,然后再递归



求大神.帮帮我吧,,,帮我写一个我这个要求的 无限分类 的代码好吗

论坛是交流的地方,要代码请左转威客网

function foo($uid=0, $ext='') {  $sql = "select * from tbl_name where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');  $rs = mysql_query($sql);  while($row = mysql_fetch_assoc($rs)) {    foo($row['id'], $ext);  } }

function foo($uid=0, $ext='') {  $sql = "select * from tbl_name where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');  $rs = mysql_query($sql);  while($row = mysql_fetch_assoc($rs)) {    foo($row['id'], $ext);  } }




function foo($uid=0, $ext='') {
$sql = "select * from column where uid=$uid" . ($uid && $ext ? " and class='$ext'" : '');
$rs = mysql_query($sql);
while($row = mysql_fetch_assoc($rs)) { 这行报错啊
echo $row['id'];
foo($row['id'], $ext);
}
}

echo foo(0, "product") ;

哥哥

报的什么错?

报错我解决了

但是这个还是必须是 UID 从0开始啊..

如果UID是空 那么class='$ext' 就报错啊

foo(3, "product")
不就从 产品 下面开始了吗?

要不要 product 无所谓

现在的问题是 这个 3 不是固定的啊

比如我的栏目有 首页 新闻 产品 视频

那么我在后台 发布产品的时候., 可选栏目中 只把产品栏目列出来啊/

那么 栏目中 可能有 多个 产品栏目.... 用于区分栏目类型 就靠 class字段中的值 比如product 表示全部是产品栏目

不用递归呢 可否实现

我一开始就讲了,既然你试要从某一个节点开始,就要先找到这个节点
无论这个节点存放在什么位置,都可以按其唯一的属性找到他

是啊.大哥

可是我不会从节点开始循环啊......怎么办,,,百度很多资料了.全是递归的

function foo($uid,$class=''){    if($class==''){        $sql = "select * from table where uid='".$uid."'";    }else{        $sql = "select * from table where uid='".$uid."' and class='".$class."'";    }    $query = mysql_query($sql) or die(mysql_error());    while($result = mysql_fetch_assoc($query)){        echo $result['id'].' '.$result['title'].'
'; foo($result['id'],$result['class']); }}foo(0);

你能从根节点上递归,不就能从子节点上递归吗?
有什么区别呢?

用递归还是不用递归,这取决于你的需要。我在精华区有好几个帖子,你可以先看看

你能从根节点上递归,不就能从子节点上递归吗?
有什么区别呢?

用递归还是不用递归,这取决于你的需要。我在精华区有好几个帖子,你可以先看看




帮助我太多了.把分给您了

后来我自已用别的思路解决了.

人气教程排行