Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于组织结构图/多级结构的php mysql选择_Php_Mysql - Fatal编程技术网

用于组织结构图/多级结构的php mysql选择

用于组织结构图/多级结构的php mysql选择,php,mysql,Php,Mysql,我已按如下方式构建了我的用户表: 现在我想选择3个蓝色的行。 我构建了以下功能: function display_children($parent, $array = array()) { global $db; $stmt = $db->prepare("SELECT id AS man, parent_id FROM user WHERE parent_id= ?"); $stmt->execute(array($parent)); while ($row

我已按如下方式构建了我的用户表:

现在我想选择3个蓝色的行。 我构建了以下功能:

function display_children($parent, $array = array()) {
  global $db;

  $stmt = $db->prepare("SELECT id AS man, parent_id FROM user WHERE parent_id= ?");
  $stmt->execute(array($parent));
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    display_children($row['man'], $array);
    $array[] = array("man" => $row['man'], "parent_id" => $row['parent_id']);
    echo $row['man']."\n"; //for debug
  }
  return $array;
}
print_r(display_children(50001));
我的输出是:

50002
50004
50003
Array
(
    [0] => Array
        (
            [man] => 50002
            [parent_id] => 50001
        )

    [1] => Array
        (
            [man] => 50003
            [parent_id] => 50001
        )

)
前三行是正确的,但数组缺少一行。
问题是,第一个父\u id有两行。但是数组在开始时是空的。我的查询有解决方案吗?

解决方案是将以下行从

display_children($row['man'], $array);


您遇到的问题是50004的记录没有50001作为其父项。您可以向where子句添加一个附加方面,但这只会添加一个级别;您需要不断为不同规模的组织增加级别。相反,您需要检查结果,对于每个以50001为父记录的记录,获取它们的子记录,以及它们的子记录,依此类推,直到获得整个结构。这就是我再次在函数中调用函数的原因:
display_children($row['man',$array)
$array = display_children($row['man'], $array);