如何在php中获取二进制树中的所有子项计数

时间:2017-09-12 06:19:56

标签: php mysql

我有那个类型表

enter image description here

现在我们想要完整的二叉树和完整的左右ch计数

3 个答案:

答案 0 :(得分:1)

不幸的是,仅使用SQL无法有效实现这一点(事实上每个节点只能有两个子节点,左边和右边,因为节点仍然可以任意嵌套,所以无法帮助),你必须以递归方式进行PHP:

function countChildren($parentId) {
    $children = (`SELECT user_id FROM table where parent_id = ?`, $parentId); // Pseudocode, use a prepared statement with your ORM or MySQL library/PDO
    $count = count($children);
    foreach($children as $userId) {
        $count += countChildren($userId);
    }
    return $count;
}

但是,如果您将表格切换为使用nested set而不是树,则查询子项以获取信息会变得更有效:

SELECT count(*) FROM table AS t JOIN table as parent_table ON (t.left > parent_table.left AND t.right < parent_table.right) WHERE parent_table.user_id = ?;

答案 1 :(得分:1)

您将需要使函数保持循环然后运行它,希望对您有所帮助。

谢谢

答案 2 :(得分:0)

QSqlQueryModel

这将显示左右计数