从同一查询的结果中选择

时间:2011-09-05 15:38:26

标签: mysql

我有一个看起来像这样的表:

id  parent_id    name
1   0            page #1
2   1            Page #2
3   1            Page #3
4   2            Page #4

* parent_id *被重新定义为id。

第4页是第2页的孩子 和页面#2是页面#1的孩子 第3页也是如此。

我需要一个可以让所有孩子都参与的mysql查询,比如id 1。 这将返回所有这些页面,因为所有页面“master parent”(lol)都是页面#1。

2 个答案:

答案 0 :(得分:1)

您基本上有两个选择:

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

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

这两个选项都包含在sitepoint的一篇优秀文章http://www.sitepoint.com/hierarchical-data-database/中(但它不包括RDBMS递归,你可能不支持它)

答案 1 :(得分:0)

以为我只是为这个问题留下了解决方案。不只是在mysql中,而是使用php。

这是一个自我调用的函数,用于检查当前页面(在循环中)是否有子项。 它将返回一个包含所有子节点(包括父节点)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;
}