PHP和MySQL在数据库中查找父母的所有子孙

时间:2014-02-26 14:36:19

标签: php mysql

我正在尝试实现以下内容: Get all child, grandchild etc nodes under parent using php with mysql query results

但我希望这样做而不将所有内容都放在一个数组中,如果没有嵌套,那么只需要逐个完成第一级并且:   - 打印项目   - 如果物品有孩子找到并打印出来   - 如果孩子有孩子找到并打印出来   - 如果孩子没有孩子向上移动一层并寻找下一个孩子或物品,那就是孩子   - 等等......最好是UL LI列表和子列表

我的数据库和输出也需要订购,所以看起来更像是这样:

id     name       parent_id     orderby
1  Electronics          0         0
2  Televisions          1         10
3  Portable Electronics 1         20
4  Tube                 2         20
5  LCD                  2         10
6  Plasma               2         30
7  Mp3 Players          3         30
8  CD Players           3         20
9  2 Way Radios         3         10
10 Flash                7         10

我可以使用if语句来做,但为了做到这一点,我需要知道最深的孩子有多少级别,如果有7个级别变得混乱。我已经看到它(在上面的链接中)放入一个多维数组但是看起来你需要为每个语句嵌套以再次获取数据,这与嵌套的if解决方案几乎相同。

我很确定答案是在我的鼻子底下但却无法在这里或其他地方找到答案....

WordPress似乎有办法实现,但我无法在那里发现代码。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

使用以下代码获取数据:

function getChildren($parent) {
    $query = "SELECT * FROM tableName WHERE parent_id = $parent";
    $result = mysql_query($query);
    $children = array();
    $i = 0;
    while($row = mysql_fetch_assoc($result)) {
        $children[$i] = array();
        $children[$i]['name'] = $row['name'];
        $children[$i]['children'] = getChildren($row['id']);
    $i++;
    }
return $children;
}

使用

调用此函数
$finalResult = getChildren('*');

James编辑

只是为了完成这个答案,将结果打印到列表中:

<?php
    function printList($array = null) {
        if (count($array)) {
            echo "<ul>";

            foreach ($array as $item) {
                echo "<li>";
                echo $item['name'];
                if (count($item['children'])) {
                    printList($item['children']);
                }
                echo "</li>";
            }

            echo "</ul>";
        }
    }

    printList($finalResult);
?>