Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 从同一查询的结果中选择_Mysql - Fatal编程技术网

Mysql 从同一查询的结果中选择

Mysql 从同一查询的结果中选择,mysql,Mysql,我有一张桌子看起来像这样: id parent_id name 1 0 page #1 2 1 Page #2 3 1 Page #3 4 2 Page #4 *父项id*重设为id 第4页是第2页的子页 第2页是第1页的子页 第三页也是如此 我需要一个mysql查询,可以让所有的孩子,比如说id 1。 这将返回所有这些页面,因为所有页面主控父lol都是第1页。您基本上有两个选项:

我有一张桌子看起来像这样:

id  parent_id    name
1   0            page #1
2   1            Page #2
3   1            Page #3
4   2            Page #4
*父项id*重设为id

第4页是第2页的子页 第2页是第1页的子页 第三页也是如此

我需要一个mysql查询,可以让所有的孩子,比如说id 1。
这将返回所有这些页面,因为所有页面主控父lol都是第1页。

您基本上有两个选项:

如果RDBMS支持递归,则在应用程序逻辑或查询中使用递归

为树中的每个节点存储左/右值,这样可以轻松找到节点的所有子树


sitepoint上的一篇优秀文章介绍了这两个选项,但没有介绍RDBMS递归,您的RDBMS递归可能无论如何都不支持。不仅仅是mysql,还有php

这是一个调用self的函数,用于检查循环中的当前页面是否有子页面。 它将返回一个包含所有子项(包括父id)的数组

public function getPageChildren($parent_id) {
    $result = mysqli_query($con, 'SELECT id FROM pages WHERE parent_id = '.$parent_id);
    while($children = mysqli_fetch_assoc($result)) {
        if($children) {
            $childrenArray[] = $children['id'];
            $childrensChildren = getPageChildren($children['id']);

            foreach($childrensChildren as $childrensChild) {
                $childrenArray[] = $childrensChild;
            }
        }
    }
    return $childrenArray;
}