Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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
如何在php中获得二叉树中的所有子节点数_Php_Mysql - Fatal编程技术网

如何在php中获得二叉树中的所有子节点数

如何在php中获得二叉树中的所有子节点数,php,mysql,Php,Mysql,我有那张桌子 现在我们需要完整的二叉树和完整的左、右chides计数 SELECT leg , count(user_id)as Count FROM table GROUP BY leg 这将显示左侧和右侧的计数不幸的是,仅使用SQL无法有效地做到这一点(每个节点只能有两个子节点,左侧和右侧,这一事实没有帮助,因为节点仍然可以嵌套任意深),您必须使用PHP递归地执行此操作: function countChildren($parentId) { $children = (`SEL

我有那张桌子

现在我们需要完整的二叉树和完整的左、右chides计数

SELECT  leg , count(user_id)as Count FROM table GROUP BY leg

这将显示左侧和右侧的计数

不幸的是,仅使用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;
}
但是,如果您将表切换为使用树而不是树,则查询子项以获取信息会更加高效:

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 = ?;
在(t.left>parent_table.left和t.right
您需要将函数保持在循环中,然后运行它,希望这对您有所帮助


谢谢

您能分享到目前为止的任何代码吗。并不是每个人都会为你提供免费的编码服务。我已经创建了一个函数,比如count($parent_id,$leg){$select=“选择count(user_id)作为总计,user_id来自users,其中parent_id=$parent_id和leg=$leg”;foreach($select as$key=>$value){$count+=$value['total'];count($value['user_id'],$leg)}不,这不起作用。如果您按其父id计数,只按其父id分组,我不明白您的要求是什么。实际上,所有子项不仅计数父项我想要父项-父项-父项计数我不推荐这种方法。尝试在MYSQL中执行递归,这也优化了性能,而不是在客户端执行。