使用php和mysql查询结果获取父级下的所有子节点、孙子节点等

2024-03-03

我一直在试图解决这个问题,但我一无所获。希望有人能来拯救我。

我的问题是我正在使用邻接列表数据模型在 mysql 中生成层次结构数据。我可以将表(见下文)检索到一个多维数组中,其中每个项目都有关联数组。我想要做的是,一旦我得到这个数组,我想得到另一个数组,其中包含父 id (包括父项)下的所有节点(子节点、孙子节点等)。我只是无法锻炼如何在其中编码php。

在 MySQL 中,我的表如下所示:

id     name       parent_id
1  Electronics          0
2  Televisions          1
3  Portable Electronics 1
4  Tube                 2
5  LCD                  2
6  Plasma               2
7  Mp3 Players          3
8  CD Players           3
9  2 Way Radios         3
10 Flash                7

我可以使用此代码将所有行检索到关联数组中。

$r = mysql_query("SELECT * FROM test ");
        $data = array();
        while($row = mysql_fetch_assoc($r)) {
         $data[] = $row;
         }      

得到结果:

Array 
( 
    [0] => Array 
    ( 
        [id] => 1 
        [name] => Electronics 
        [parent_id] => 0 
    ) 
    [1] => Array 
    ( 
        [id] => 2 
        [name] => Televisions 
        [parent_id] => 1 
    ) 
    [2] => Array 
    ( 
        [id] => 3 
        [name] => Portable Electronics 
        [parent_id] => 1 
    )
    [3] => Array 
    (
        [id] => 4 
        [name] => Tube 
        [parent_id] => 2 
    )
    [4] => Array 
    (
        [id] => 5 
        [name] => LCD 
        [parent_id] => 2
    )
    [5] => Array
    (
        [id] => 6 
        [name] => Plasma 
        [parent_id] => 2
    )
    [6] => Array
    (
        [id] => 7 
        [name] => Mp3 Players 
        [parent_id] => 3 
    )
    [7] => Array 
    (
        [id] => 8 
        [name] => CD Players 
        [parent_id] => 3
    )
    [8] => Array 
    (
        [id] => 9 
        [name] => 2 Way Radios 
        [parent_id] => 3
    )
    [9] => Array
    (
        [id] => 10 
        [name] => Flash 
        [parent_id] => 7 
    ) 
)

有了这些结果,我想用 id 过滤它。

举例来说,我想要 Portable Electronics 下每个节点的关联数组,其 id 为 3。(使用 id 进行代码)

它将返回一个包含 id 行的数组:

  • 3 便携式电子产品(必须包括选定的家长)
  • 7 个 Mp3 播放器(儿童)
  • 8 CD 播放机(儿童)
  • 9 2 路收音机(儿童)
  • 10 闪光(孙子)

如果 Flash 有孩子,它也会返回这些孩子。

因此,最终结果将返回一个类似于上面的数组,但仅包含这些项目。

请注意: 我不是在寻找一个创建树结构多维数组的函数(已经找到了解决方案)。我想构建一个函数: fetch_recursive($id) ,它接收 ID 并返回该级别中的所有项目,在下面的级别等等。

希望这可以帮助

提前致谢


Edit:

我之前发布了一个解决方案,可以根据您提供的输出构建多维数组,以及获取特定的所有子元素的方法id从那个特定的数组中。我现在已经弄清楚如何直接从输出中检索子元素(无需首先通过buildtree()功能:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}

要使用上面的函数,只需传入输出数组即可$data对于第一个参数和id您想要从第二个参数中检索子元素:

ex.:

$list = fetch_recursive($data, 3);

这应该给你正确的数组结构id 3(如本答案最后一个代码框中的示例所示)。


原答案:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用php和mysql查询结果获取父级下的所有子节点、孙子节点等 的相关文章

  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • oursql 中的参数化查询

    如果有人能告诉我是否可以使用命名占位符进行参数化查询 我将不胜感激oursql 一个用于与 MySQL 数据库交互的 python 模块 例如 我尝试了一种可以与 sqlite3 一起使用的查询 c execute select from
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • Windows iis 7.0 上的 APC 不稳定

    我的 IIS 非常不稳定 因为它总是由于某种与 APC 相关的原因而重新启动 服务器的规格如下 Intel R Xeon CPU 3GHZ 3GHZ 2GB RAM 64bit APC 和服务器规格 3 1 7 dev PHP Versio
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 我怎样才能让这个脚本在 WordPress 上运行?

    我有这个脚本 document ready function text1 click function this hide 代码html div class div1 p class text1 text to appear when th
  • PHP 错误:“无法通过引用传递参数 2”

    我只是需要有关这个 PHP 错误的帮助 我不太明白 致命错误 无法在第 13 行 web stud openup inactivatesession php 中通过引用传递参数 2
  • 简单的dom php解析获取自定义数据属性值

    HTML div class something ddsf PHP foreach dom gt find something data rel as this var dump this gt attr 我尝试了这个但错误 在其文档中找不
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 合并 url 中的 2 个输入值

    我有这样的形式
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL

随机推荐

  • Android双向数据绑定,textview不更新

    我正在尝试将 MVVM 模式与 android 数据绑定一起使用 我有一个 edittext 和一个 textview 当我通过使用 LocationType 模型对象通过 observablefield 绑定到模型来在 edittext
  • Sparklyr/Hive:如何正确使用正则表达式(regexp_replace)?

    考虑下面的例子 dataframe test lt data frame mydate c 2011 03 01T00 00 04 226Z 2011 03 01T00 00 04 226Z A tibble 2 x 1 mydate
  • 如何执行任务以避免用户被迫等待响应?

    用户创建新产品后 在我的应用程序中 我执行多项操作 例如更新几个表 统计数据 财务 使用情况 库存等 现在用户必须等待我完成所有步骤 如果很多用户托盘同时执行此操作 则等待时间会更长 这不太好 我的计划是创建一个特殊的 TASK TABLE
  • 从同级目录导入

    我有一个名为 ClassA 的Python 类和另一个Python 类 该类应该导入ClassA 即 ClassB 目录结构如下 MainDir Dir DirA ClassA DirB ClassB 我将如何使用sys path那么Cla
  • 从子视图将 Javascript 文件附加到 InlineScript 集合的末尾

    我正在使用 Zend Framework 2 在我的布局文件中 我注入了一些像这样的 javascript 文件 this gt InlineScript gt appendFile this gt basePath js myfile j
  • ASP .NET MVC 保护控制器/操作

    如果我只想管理员访问名为 ManagerUser 的操作 我知道我可以这样做 Authorize Roles Constants ROLES ADMINISTRATOR public ActionResult ManageUser stri
  • Tomcat Maven 插件 - 子容器在启动期间失败

    我正在开发一个多模块 Maven 项目 我想在 Tomcat 7 中运行我的 Web 项目 但出现此错误 子容器在启动期间失败 我继续 右键单击网络项目 gt 运行方式 gt 运行配置 gt 目标 tomcat7 run 我有这个日志 av
  • 数据表自动切换页面

    我正在尝试自动在数据表页面之间切换 但似乎无法使其正常工作 我要么得到一个长时间运行的脚本 如果我尝试添加延迟 则会收到以下错误 table page draw delay 不是函数 下面是我正在使用的代码 document ready f
  • 反斜杠字符的 Bash 参数扩展规则

    我有一个变量 我想使用双反斜杠 替换每次出现的反斜杠 外壳参数扩展 https www gnu org software bash manual html node Shell Parameter Expansion html 最初 我使用
  • 从子目录中的不同文件导入类

    这是我正在使用的结构 directory script py subdir init py myclass01 py myclass02 py 我想要做的是在 script py 中导入定义的类myclass01 py and myclas
  • 展平 pandas 中的嵌套 json

    我收到了 JSON 格式的天气观测数据 我想将其展平 一份完整记录 第一个位置包含 25 个报告 Rep in Period SiteRep DV type Obs Location i 3002 lat 60 749 lon 0 854
  • 有什么方法可以更改 VSTO Outlook 添加中的自定义任务窗格颜色吗?

    有没有办法更改邮件撰写窗口中的自定义任务窗格背景颜色 UPDATE UserControl BackColor 给了我这个结果 但我希望整个自定义任务窗格是白色的 我设置用户控件的代码在这里 public partial class Use
  • 如何使用 C++ ShellExecute 命令在特定页面或指定目的地打开 PDF

    我正在尝试打开一个 pdf在特定的指定目的地使用ShellExecute 但我不知道参数应该如何格式化 我这里使用的参数是pagew 以前有人尝试过这个吗 我找到了几个答案 但它们对我的需要没有帮助 PS 只打开 pdf工作正常 int m
  • “您需要将 Theme.AppCompat 主题(或后代)与设计库一起使用”错误

    每次我都会收到 您需要将 Theme AppCompat 主题 或后代 与设计库一起使用 错误 即使我显然使用的是 AppCompat 主题 后代主题 依赖项 compile com android support appcompat v7
  • 在 C# 中使用私钥对数据进行签名

    我需要使用算法 SHA1RSA Rsa 密钥长度 2048 和 64 基本编码 用一个私钥对一些数据进行签名 我的代码是这样的 string sPayload HttpWebRequest httpWebRequest HttpWebReq
  • 如何从 R 矩阵中随机选择重复的行样本?

    如何从 R 矩阵中随机选择重复的行样本 所以请明确一点 我将从一个 100 行的矩阵开始 我可以选择其中 5 行并创建一个新矩阵 我希望可以选择在更换或不更换的情况下执行此操作 Use sample在行上replace TRUE or re
  • 释放从 C 函数返回的内存

    在 C 中 在释放函数返回的内存时 这是更好的做法 提供一个 析构函数 来封装对 free 的调用 要求用户自己 free 返回的指针 例如 要打开和关闭文件 我们执行以下操作 FILE f fopen blah w fclose f 这是
  • 是否可以阻止 requireJS 自动添加 .js 文件扩展名?

    我正在使用 requireJS 来加载脚本 它有文档中的这个细节 http requirejs org docs api html config 用于模块名称的路径不应包含 js 扩展名 因为路径映射可能是目录 在我的应用程序中 我将所有脚
  • 平铺未在折叠工具栏中居中

    我尝试设置collapsingToolbarLayout setCollapsedTitleGravity Gravity CENTER collapsingToolbarLayout setExpandedTitleGravity Gra
  • 使用php和mysql查询结果获取父级下的所有子节点、孙子节点等

    我一直在试图解决这个问题 但我一无所获 希望有人能来拯救我 我的问题是我正在使用邻接列表数据模型在 mysql 中生成层次结构数据 我可以将表 见下文 检索到一个多维数组中 其中每个项目都有关联数组 我想要做的是 一旦我得到这个数组 我想得