PHP / SQL递归函数获取所有父数据

时间:2018-04-11 01:30:24

标签: php mariadb codeigniter-3

我知道有很多关于递归查询的问题,但这不是一个“如何”问题,而是“我错过了什么?”。

我觉得我很亲密,但这对我不起作用。我试图让所有的父母都属于一个子类别:

  

数据

cat_id | cat_parent | cat_name | cat_description | cat_sort | cat_active 
1 | 0 | Home | Primary Forum Location | 6 | 1
2 | 0 | Software | Software Discussions | 1 | 1
17 | 1 | Programming |  | 1 | 1
19 | 1 | MySql Workbench | Description | 1 | 1
20 | 2 | SQL Tables | Description | 2 | 1
21 | 2 | Another Test |  | 1 | 1
22 | 21 | Sub-Sub Cat |  | 1 | 1
23 | 22 | Sub-Sub-Sub Cat |  | 1 | 1
  

控制器

    function getparents($catid = 1) {
    $parents = $this->forum_model->get_parent($catid);

    echo "<pre>" . print_r($parents, TRUE) . "</pre>";
}
  

模型

function get_parent($catid = 0) {
    $parent = array();
    $this->db->select('*');
    $this->db->from(TBL_FORUM_CATEGORIES);
    $this->db->where('cat_id',$catid);
    $child = $this->db->get()->row_array();
    $parent[] = $child;

       if ($child['cat_parent'] == 0) {
           return $parent;
       } else {
           $push = $this->get_parent($child['cat_parent']);
           array_push($parent,$push);
       }        
}
  

结果

<pre></pre>

我知道它至少部分正确地进行了查询,因为我打开了探查器,我可以看到发生的查询。

运行ID = 22的控制器:

0.0007      SELECT * FROM `forum_categories` WHERE `cat_id` = '22' 
0.0004      SELECT * FROM `forum_categories` WHERE `cat_id` = '21' 
0.0004      SELECT * FROM `forum_categories` WHERE `cat_id` = '2' 

1 个答案:

答案 0 :(得分:1)

在$ push变量的数组推送之后,写:

 return $parent;

足以让你的函数充当它自己的循环。