簡體   English   中英

PHP mysql 樹子計數和列出所有子節點級別明智

[英]PHP mysql Tree Child count and List All Child node level wise

我有一棵樹
樹形圖
我想要 output 用於請求的 ID,例如管理員
所需的輸出。


我的表結構是
表/數據庫結構

我有一個方法可以返回子計數級別,但我也想返回子列表級別,子計數級別,例如需要第二張圖像 output。

function childCountLevelWise($conn,$ID, $level){
if ($level>14){
    $count = array(0=>0); 
    return $count;
}
$sql="select * from user_my_tree t where t.parent_ID=".$ID;
$result=returnResults($conn,$sql);
if ($result==null){
    $count = array(0=>0); 
}
else{
    $count = array(0=>0);
    foreach($result as $key=>$row)
    {   
        $count[0]++;
        $children=childCountLevelWise($conn,$row['ID'], $level+1);
        $index=1;
        foreach ($children as $child)
        {
            if ($child==0)
                continue;
            if (isset($count[$index]))
                $count[$index] += $child;
            else    
                $count[$index] = $child;
                $index++;
        }    
    }    
}
return $count; 

}

聽起來您只是想要一種計算嵌套集的方法,我可以在不使用帶有以下代碼的數據庫的情況下重現您的示例:

function returnResults($parent)
{
    switch ($parent) {
        case 'root':
            return ['vijay', 'suresh', 'mukesh'];
        case 'vijay':
            return ['manish', 'rohan', 'manu'];
        case 'manish':
            return ['rinku', 'raja', 'vijay2'];
        default:
            return [];
    }
}

function childCountLevelWise($parent, $level, &$result)
{
    $result[$level] = empty($result[$level]) ? [] : $result[$level]; // init array
    if ($level > 14) {
        return; // ignore levels over 14
    }

    $levelResults = returnResults($parent); // get results for this parent
    $result[$level] = array_merge($result[$level], $levelResults); // add to results for this level
    foreach ($levelResults as $child) {
        childCountLevelWise($child, $level + 1, $result); // check for each child at this level
    }
}

並使用此代碼調用它並打印結果

childCountLevelWise('root', 0, $result);

// print result
foreach ($result as $level => $people) {
    if (!empty($people)) {
        printf('Result for level %d: %s', $level, implode(',', $people));
        echo "\n";
    }
}

將導致:

Result for level 0: vijay,suresh,mukesh
Result for level 1: manish,rohan,manu
Result for level 2: rinku,raja,vijay2

從那里我認為在我的示例中修改returnResults function 以查詢數據庫應該足夠簡單,盡管如果您在很多結果上使用它,您可能需要考慮它的性能成本。 已經有很好的解決方案可以在數據庫中包含樹結構,例如 Doctrine 中的嵌套集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM