取得产品根ID(结果我写成死循环了)

2016-07-07 15:04 来源:www.chinab4c.com 作者:ecshop专家


  1. function get_root_id($id) {
  2. $sql="select cat_id,parent_id from ". $GLOBALS['ecs']->table('category') ." where cat_id=".$id ;
  3. $row = $GLOBALS['db']->getRow($sql);

  4. if($row['parent_id'] == 0) {
  5. return $row['cat_id'];
  6. }else{
  7. return get_root_id($row['cat_id']);
  8. }
  9. }
复制代码
大家看一下,我想知道错在那里了???

回答:
return get_root_id($row['cat_id']);


  1. function get_root_id($id) {
  2. $sql="select cat_id,parent_id from ". $GLOBALS['ecs']->table('category') ." where cat_id=".$id ;
  3. $row = $GLOBALS['db']->getRow($sql);
  4. if($row['parent_id'] == 0) {
  5. return $row['cat_id'];
  6. }else{
  7. return $row['parent_id'];
  8. }

  9. }
复制代码

huay1

你写的这个只是取得这个类的父ID,并不是取得根ID。

因为这些我调用的是无限级分类的那种,而且我在数据库加了好多的类别。给一个ID必须要取得它所在类别的根ID。



ECSHOP本身就有现成的函数可以利用的,不用自己另写函数

$parents=get_parent_cats($cat_id);
foreach ($parents as $parent_val)
{
$topcatid=$parent_val['cat_id'];
}

得到的那个$topcatid 就是你想要的根ID

还有一种书写更简单的方法

$parents=get_parent_cats($cat_id);
$topcat=array_pop($parents);

最后那个 $topcat['cat_id'] 就是你想要的根ID

谢谢各位热心相助。

zhangyh,能不能把我的代码看一下,分析一下,是错在那里了,像这样的代码我在其它的系统里也会用到,不然每次到这个取根ID时都会卡住。

授之于鱼不如授之于渔。

希望下一个回贴者能解析一下错的原因及解决方案。在此先谢过了。



关于你的代码错在哪里,
第2楼的huay1已经给你分析出来了,不过他在第3楼提供的修改方法是不对的,
就是错在 return get_root_id($row['cat_id']);

修改方法:


return get_root_id($row['cat_id']);
修改为
return get_root_id($row['parent_id']);

哎啊,传一个ID,然后再取出这个ID的记录,然后再循环这个ID,不就是原来传入的ID吗!!!!

晕倒,当时自己怎么想都想不通。

谢谢zhangyh,太感谢您了。