我知道有很多关于递归查询的问题,但这不是一个“如何”问题,而是“我错过了什么?”。
我觉得我很亲密,但这对我不起作用。我试图让所有的父母都属于一个子类别:
数据
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'
答案 0 :(得分:1)
在$ push变量的数组推送之后,写:
return $parent;
应足以让你的函数充当它自己的循环。