【发布时间】:2018-04-11 01:30:24
【问题描述】:
我知道有很多关于递归查询的问题,但这不是一个“如何做”的问题,而是“我错过了什么?”。
我觉得我很接近了,但这对我不起作用。我试图让所有父母都加入一个子类别:
cat_id |猫父母 |猫名 | cat_description | cat_sort | cat_active 1 | 0 |主页 |主要论坛地点 | 6 | 1 2 | 0 |软件 |软件讨论 | 1 | 1 17 | 1 |编程 | | 1 | 1 19 | 1 | MySql 工作台 |说明 | 1 | 1 20 | 2 | SQL 表 |说明 | 2 | 1 21 | 2 |另一个测试 | | 1 | 1 22 | 21 |子子猫 | | 1 | 1 23 | 22 |子子子子猫 | | 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'【问题讨论】:
-
这应该对你有很大帮助。 stackoverflow.com/questions/20215744/…
-
是的,这些是递归函数的“如何”答案的定义,但不幸的是没有告诉我我的问题的基本部分......“我错过了什么?”跨度>
-
试试我的回答让我知道 print r 说什么
-
它做到了......虽然我对它需要在那里的原因感到困惑。如果我遍历父母并将每个结果推入 - 为什么第一个返回父母不够?
-
每次调用 get_parent() 时,都会打开它的一个新实例。这意味着只有当 $child['cat_parent'] = 0 时才会返回 get_parent。所以它只有在您使用的第一个 id 没有父级 (= 0) 时才有效。这是因为如果他们确实有一个父级,它将使用 $push = get_parent() 打开一个新的 get_parent 实例。然而,即使 $push 从 get_parent 获取了一个值,它也会被 array_push 推送到 $parent 中,但之后没有任何东西可以返回它。基本上你的第一个 get_parent() 打开另一个 get_parent () w/ new parent[] array
标签: php mariadb codeigniter-3