字段:
    ID               IDS             name
顶级分类ID      子分类ID      名称
IDS为0来识别顶级分类  IDS=ID识别ID下的子分类htm中代码为:
循环开始
<li>
<a>顶级分类名称(1个)</a><a>子分类名称(3个或更多)</a>
</li>
循环结束效果:
新闻----新闻子分类1  新闻子分类2  新闻子分类3 ....
新闻s----新闻子分类1s  新闻子分类2s  新闻子分类3s ....
......略我自己弄的效果只显示了顶级分类,子分类只显示一个
而且每次循环除了顶级分类显示正确以外,子分类名称都重复显示在所有顶分类后面。
请问,在php里的代码是什么样的?请给个具体的例子,能带注释更好了,非常感谢~!

解决方案 »

  1.   

    递归可以读取全部,以下是我写的一个递归,你可以修改一下使用
    //函数:递归取得当前所在节点的所有父类节点相关信息(由下往上)
    //参数:底层节点id;页面连接参数;允许提取的最上层节点id;各个字段之间的分隔符;需要显示的字段(取值范围id,name,parent)
    //返回: Echo FatherClass(5)返回分类表数据 根类别 > 一级分类 > 二级分类(无超链接)
    //返回: Echo FatherClass(5,"?","lable")返回标签表数据 根类别 > 一级分类 > 二级分类(无超链接)
    // Echo FatherClass(5,"?")返回 根类别 > 一级分类 > 二级分类(有超链接)
    // Echo FatherClass(5,"","",1,",","id")返回 1,2,3(无超链接)
    Function FatherClass($id,$Url='',$Table="service",$Root=1,$Ico=" &gt; ",$FieldSet="name"){
    $IsSql="id,parent,name";
    IF(StrToLower($FieldSet)=="name"){
    //$tmpUrl=Str_iReplace("lass={$id}&","lass=&",$Url);
    IF($id==0){Return ($Url=='')?YJ_SysName:"<a href=\"".$Url."Parent=0\" style=\"font-weight:bold;\">易居網</a>";}
    }Else{
    IF(!StriStr("id,parent,name,",$FieldSet)){
    $IsSql="id,parent,name,".$FieldSet;
    }
    }
    Global $Mysql;
    $Rs = $Mysql->Get("SELECT ".$IsSql." FROM ".$Table." WHERE id=".$id." ORDER BY id desc LIMIT 0,1");
    IF(!$Rs)Return;
    $StrField = $Rs[$FieldSet];
    $UrlTitle = (($Url=='')?$StrField:"<a href=\"".$Url."parent=".$id."\" style=\"font-weight:bold;\">".$StrField.'</a>');
    Return FatherClass($Rs['parent'],$Url,$Table,$Root,$Ico,$FieldSet).((FatherClass($Rs['parent'],$Url,$Table,$Root,$Ico,$FieldSet)=='')?'':$Ico).$UrlTitle;
    }不过你的这个数据库设计的似乎有点....我给你提个建议
    id 分类id
    parent 父分类id(如果已经没有父分类了则值是0)
    name 分类名这种数据库设计方法用来存储无限级分类都完全没问题.