【问题标题】:PHP/SQL recursive function to get all parent dataPHP/SQL递归函数获取所有父数据
【发布时间】: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


【解决方案1】:

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

 return $parent;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 2011-04-12
    • 2016-01-28
    • 1970-01-01
    • 2022-01-20
    • 2011-01-24
    • 2013-12-24
    • 2017-01-09
    相关资源
    最近更新 更多