根据级别计算结果

the*_*com 5 php mysql

我有这样的邻接列表模式结构,我想根据级别计算父级的所有标题 Food = (2,4,3), Fruit = (3,3)

树表结构

在此输入图像描述

在那之后做那样的树

在此输入图像描述

通过这个代码我得到正确的总和像食物= 9,水果= 6

function display_children($parent, $level) 
{

 $result = mysql_query('SELECT title FROM tree '.'WHERE parent="'.$parent.'"');
 $count = 0;
  while ($row = mysql_fetch_array($result))
   {
    $data=  str_repeat(' ',$level).$row['title']."\n";
    echo $data;
    $count += 1 + $this->display_children($row['title'], $level+1);
   }  
    return $count; 
 }
Run Code Online (Sandbox Code Playgroud)

通话功能

 display_children(Food, 0) 
Run Code Online (Sandbox Code Playgroud)

结果:9 //但我希望得到像2,4,3的结果

但我希望得到的数据总结果如同食物2,4,3和水果3,3等级

所以PLZ指导如何获得总水平

Kyb*_*rek 2

如果您想按级别获取金额,请让函数按级别返回它们。

function display_children($parent, $level) 
{

 $result = mysql_query('SELECT title FROM tree WHERE parent="'.$parent.'"');
 $count = array(0=>0);
  while ($row = mysql_fetch_array($result))
   {
    $data=  str_repeat(' ',$level).$row['title']."\n";
    echo $data;
    $count[0]++;
    $children= $this->display_children($row['title'], $level+1);
    $index=1;
    foreach ($children as $child)
    {
     if ($child==0)
      continue;
     if (isset($count[$index]))
      $count[$index] += $child;
     else    
      $count[$index] = $child;
     $index++;
    }
   }  
    return $count; 
 }
Run Code Online (Sandbox Code Playgroud)

请注意,我很难调试代码,因为我没有你的桌子。如果有任何错误请告诉我,我会修复它。无论如何,结果将是一个数组,其中应包含由索引指定的级别数量:

$result=display_children("Food", 0) ;
var_export($result);//For exact info on all levels 
echo $result[0];//First level, will output 2
echo $result[1];//Second level, will output 4
echo $result[2];//Third level, will output 3
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的数据库中有拼写错误,id 10(牛肉)应该有父级“肉”而不是“节拍”,我猜。

如果您想查看测试页面,请点击这里