PHP/CodeIgniter 递归函数从自引用 SQL 表返回记录

标签 php mysql sql codeigniter

这对我来说确实是一个挑战。我正在尝试构建一个小型应用程序,允许用户将文件组织到文件夹和子文件夹中。我使用 1 个 MySQL 表作为文件夹,其中包含一个字段 (parent_id) 来引用同一个表中的父文件夹。

我正在尝试创建一个函数,该函数返回一个包含特定folder_id的所有子文件夹的数组,下面是我的尝试,这只返回第一级子文件夹[此代码错误&我完全卡住了!!] .

private function child_folders($folder_id,$user_id,$folders = array()) {
 $query = this->db->get_where("folders",array("parent_id"=>$folder_id,"user_id"=>$user_id));
    if ($query->num_rows() > 0) {
       foreach ($query->result_array() as $folder) {
          array_push($folders, $folder);
       }
        return $this->child_folders($folder["folder_id"],$user_id,$folders);
    } else {
         return $folders;
    }
}

MySQL 表

+-----------+---------+-------------+---------------------+-----------+---------+
| folder_id | name    | description | datetime            | parent_id | user_id |
+-----------+---------+-------------+---------------------+-----------+---------+
|       170 | 1       | NULL        | 2014-03-28 19:42:02 |         0 |     164 |
|       171 | 1.1     | NULL        | 2014-03-28 19:42:57 |       170 |     164 |
|       172 | 1.2     | NULL        | 2014-03-28 19:43:07 |       170 |     164 |
|       173 | 1.3     | NULL        | 2014-03-28 19:43:19 |       170 |     164 |
|       174 | 1.3.1   | NULL        | 2014-03-28 19:44:13 |       173 |     164 |
|       175 | 1.3.2   | NULL        | 2014-03-28 19:44:29 |       173 |     164 |
|       176 | 1.3.3   | NULL        | 2014-03-28 19:45:06 |       173 |     164 |
|       177 | 1.3.3.1 | NULL        | 2014-03-28 19:45:33 |       176 |     164 |
|       178 | 2       | NULL        | 2014-03-28 20:55:33 |         0 |     164 |
|       179 | 2.1     | NULL        | 2014-03-28 20:56:09 |       178 |     164 |
|       180 | 2.2     | NULL        | 2014-03-28 20:58:03 |       178 |     164 |
|       181 | 2.3     | NULL        | 2014-03-28 20:58:19 |       178 |     164 |
|       182 | 2.1.1   | NULL        | 2014-03-28 20:59:40 |       179 |     164 |
|       183 | 2.1.2   | NULL        | 2014-03-28 21:00:05 |       179 |     164 |
+-----------+---------+-------------+---------------------+-----------+---------+

最佳答案

尝试在你的函数行中做一些小的改变。

$folders = array();

private function child_folders($folder_id,$user_id,&$folders) {
$query = this->db->get_where("folders",array("parent_id"=>$folder_id,"user_id"=>$user_id));
    if ($query->num_rows() > 0) {
       foreach ($query->result_array() as $folder) {
          array_push($folders, $folder);
       }
        return $this->child_folders($folder["folder_id"],$user_id,$folders);
    } else {
         return $folders;
    }
}

关于PHP/CodeIgniter 递归函数从自引用 SQL 表返回记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22727224/

相关文章:

MYSQL -- 多个哪里不工作

sql - 创建名称中包含当前日期的架构

php - 将 sql 变量传递给 PHP 变量,然后返回给 sql 语句

sql - 我需要某种条件连接

php - php 代码之前的 javascript 警报

php - 以某个字符串开头并忽略那些包含特定字符串的正则表达式

MySQL 如何选择一组日志条目中两个日志条目之间的时间差?

javascript - ajax请求成功但看不到我的数据

php - 如何使用php在html中搜索youtube和vimeo视频

php - 防止用户注销后再次进入页面