首页  >  文章  >  数据库  >  如何使用 PHP 获取 MySQL 中父节点的所有子节点和后代节点?

如何使用 PHP 获取 MySQL 中父节点的所有子节点和后代节点?

Barbara Streisand
Barbara Streisand原创
2024-11-07 02:13:02646浏览

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

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

本文将引导您完成一种检索所有子节点和后代节点的方法使用 PHP 和 MySQL 查询结果的指定父级。这种技术消除了构建树结构的多维数组的需要,使您能够直接获取所有节点。

考虑一个组织为邻接列表的 MySQL 表,其中层次结构数据用 id、name 列表示和parent_id。以下 SQL 查询可以将此表中的所有行检索到关联数组中:

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

假设我们要过滤此数组以查找 id 为 3 的父级下的节点,包括父级本身。这个自定义的 fetch_recursive 函数可以完成这个任务:

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 传递为第二个参数:

$list = fetch_recursive($data, 3);

$list 现在将包含一个关联数组,其中包含所有子节点和父节点 (id 3)。

此解决方案有效检索所有子节点和后代节点对于指定的父级,无需构建多维树结构。

以上是如何使用 PHP 获取 MySQL 中父节点的所有子节点和后代节点?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn