如何在php中获得二叉树中的所有子节点数
我有那张桌子 现在我们需要完整的二叉树和完整的左、右chides计数如何在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
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中执行递归,这也优化了性能,而不是在客户端执行。