Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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
mysql+;php检索带有路径的叶子树_Php_Mysql_Sql - Fatal编程技术网

mysql+;php检索带有路径的叶子树

mysql+;php检索带有路径的叶子树,php,mysql,sql,Php,Mysql,Sql,我有一张这样的桌子 +-----------+-----------+-----------+-----------+-----------+-----------+ |id | parent_id | name | order | status | date_add | +-----------+-----------+-----------+-----------+-----------+-----------+ |1 | 0

我有一张这样的桌子

+-----------+-----------+-----------+-----------+-----------+-----------+
|id         | parent_id | name      | order     | status    | date_add  |
+-----------+-----------+-----------+-----------+-----------+-----------+
|1          | 0         | shoes     | 1         | 1         | 2011-04-02|
+-----------+-----------+-----------+-----------+-----------+-----------+
|2          | 1         | male      | 2         | 1         | 2011-04-02|
+-----------+-----------+-----------+-----------+-----------+-----------+
|3          | 1         | female    | 3         | 1         | 2011-04-02|
+-----------+-----------+-----------+-----------+-----------+-----------+
|4          | 3         | red shoes | 4         | 1         | 2011-04-02|
+-----------+-----------+-----------+-----------+-----------+-----------+
我只想选择叶子树及其路径

我想得出如下结果:

+------+-------------------------------------+
| 2    | shoes/male                          |
+------+-------------------------------------+
| 4    | shoes/female/red shoes              |
+------+-------------------------------------+
如果不这样做,那么sql也可以是php+sql


请帮助我。

非常简单的解决方案,可以使用PHP打印出所有最后一个子节点的id和路径,因为我不知道在MySQL中有什么方法可以做到这一点。希望这有帮助

function getChildren($parent= "", $x = 0) {
   $sql = "SELECT id, name FROM recurr WHERE parentId = $x";
   $rs = mysql_query($sql);
   //echo "Name: $parent has ". mysql_num_rows($rs)." children<br/>";
   while ($obj = mysql_fetch_object($rs)) {
      if (hasChildren($obj->id)) {
         getChildren($parent."/".$obj->name, $obj->id);
      } else {
         echo $obj->id .", ".$parent."/".$obj->name."<br/>";
      }
   }
}

function hasChildren($x) {
   $sql = "SELECT * FROM recurr WHERE parentId = $x";
   $rs = mysql_query($sql);
   if (mysql_num_rows($rs) > 0) {
      return true;
   } else {
      return false;
   }
}

我强烈建议为分层MySQL数据实现嵌套集模型。以下是有关详细信息的链接:。在链接中,您还可以找到问题的答案(在“邻接列表模型”、“查找所有叶节点”部分下)

“最后一个孩子”应该是“叶”,您已经尝试了什么?我只是想看看你实际上已经在努力解决这个问题。我不明白你的意思?什么叶子?对于未知深度的纯mysql查询,我不太可能做到这一点。所以,在php中实现一些递归函数来检索它。@zerkms你能给我一个例子吗?+1对于纯SQL解决方案。这正是我想要的:)
getChildren();