鍍金池/ 問(wèn)答/人工智能  PHP  數(shù)據(jù)庫(kù)/ php怎么計(jì)算輸出數(shù)據(jù)表里組織架構(gòu)圖的數(shù)組結(jié)構(gòu)

php怎么計(jì)算輸出數(shù)據(jù)表里組織架構(gòu)圖的數(shù)組結(jié)構(gòu)

我的數(shù)據(jù)庫(kù)表user_tree是這樣的,這是一個(gè)左右值樹(shù),Level代表樹(shù)深度,Lft是左值,Rgt是右值。

userid name Lft Rgt Level
1001 wang 1 16 1
1002 li 2 7 2
1003 wlm 8 15 2
1005 bander 3 4 3
1008 qipl 5 6 3
1007 buliao 9 12 3
1009 wumao 13 14 3
1013 zhangsan 10 11 4

組織結(jié)構(gòu)圖:
組織結(jié)構(gòu)圖

用php怎么能實(shí)現(xiàn),任意給一個(gè)userid值,就能組織成一個(gè)多維數(shù)組結(jié)構(gòu)。
例如我輸入一個(gè)函數(shù)aaa(userid=1003),就能返回1003下面所有子孫節(jié)點(diǎn),組織的多維數(shù)組。只用一次查詢,不能循環(huán)去數(shù)據(jù)庫(kù)查詢,服務(wù)器受不住。最多2次查詢,就能出現(xiàn)結(jié)果。最多返回4層。例如,輸入1003。查詢到1003,在2層,那么最多查詢到6層。

查詢1003節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)是這樣的,左右值樹(shù)參考

SELECT * FROM user_tree WHERE Lft >= 8 AND Lft <= 15 AND Level<=6 ORDER BY Level ASC
array(
    'userid' => '1003',
    'name' => 'wlm',
    'children' => array(
        0 => array(
            'userid' => '1007',
            'name' => 'buliao',
            'children' => array(
                0 => array(
                    'userid' => '1013',
                    'name' => 'zhangsan'
                )
            ) ,
        1 => array(
            'userid' => '1009',
            'name' => 'wumao'
            ) ,
        ) ,
    ) ,
);

想了3天了,搞不出來(lái),所以求助一下這里的前輩。

回答
編輯回答
兔寶寶

數(shù)據(jù)庫(kù)查出來(lái)不可能是多維以上的結(jié)果,查出來(lái)后你必須按照左右權(quán)值計(jì)算出tree來(lái),可以在加個(gè)字段pid 就簡(jiǎn)單了

2017年12月7日 09:09