php mysql生成父子樹結構

2022-07-13 18:00:10 字數 2713 閱讀 7659

專案中可以經常要生成tree結構, 一般都是從資料庫裡讀父子表,

方式很多種,哪種最好呢?  下面舉個示例:

資料庫:

1--2

--表的結構 `oa_group`3--

45create

table

ifnot

exists

`oa_group` (

6 `id` int(11) not

null

auto_increment,

7 `describe` varchar(50) not

null

,8 `auth` varchar(20) default

null

,9 `parent_id` int(11) not

null

default'0

',10primary

key(`id`)

11 ) engine=innodb default charset=utf8 auto_increment=44;

1213

--14

--轉存表中的資料 `oa_group`

15--

1617

insert

into `oa_group` (`id`, `describe`, `auth`, `parent_id`) values

18 (1, '

管理員', '

["all"]

', 0

),19 (2, '

業務經理

', '

["1","3"]

', 0

),20 (3, '

片區主管

', '', 0

),21 (4, '

業務員', '', 3

),22 (5, '

資料檢視

', '', 1

),23 (6, '

錄入員', '', 5

),24 (7, '

碩放片區

', '', 2

),25 (8, '

梅村片區

', '', 3

),26 (12, '

王經理', '', 8

),27 (13, '

老王經理

', '', 2

),28 (42, '

新增組', '', 0

),29 (43, '

新增0組

', '', 42);

方法一:(遞迴)

<?php 

function getsql($sql

)

mysql_select_db("test",$link

);

mysql_query("set names utf8");

$result = mysql_query($sql

);

$data = array

();

while($row=mysql_fetch_array($result,1))

mysql_close($link

);

return

$data;}

function tojson($pid=0)";

$data = getsql($sql

);

$jsondata = array

();

foreach($data

as$v

)

return

$jsondata;}

print_r

((tojson()));

//print_r(json_encode(array_values(tojson())));

?>

這種方法就是簡單,一看就懂, 但是效率很低,這樣迴圈的讀資料庫tcp開銷太大.

方法二:(迴圈)

1

function

tojson2()

9foreach($json_data

as$v)15

}16ksort($json_data

);17

return

$json_data

;18 }

這種方法看起來挺好, 可以要兩次迴圈,能不能優化下呢?

方法三:

1

function

tojson3()

9//foreach($json_data as $v)

16//

$json_data[$v['id']] = $v;17}

18ksort($json_data

);19

return

$json_data

;20 }

和方法二比,這優化了很多. 但要注意的兩者之間的區別:

方法二中的sql語句和方法二比少了乙個order by id desc.且parent_id不於id

這很重要,因為方法三中$json_data[$v['parent_id']]['children']時如果沒有排序id..那麼可能這個資料的index還沒有生成.

由此可以看出,方法三的侷限性在於: parent_id必須比id小.當然一般id自動編號的話這是肯定比它小的,

手工指定的parent_id還是方法二比較有效!

使用tree生成專案目錄樹結構

全域性安裝 npm install g treer 使用示例 treer e result.txt i node modules 遍歷到result.txt檔案,忽略node modules 缺陷 格式固定,引數順序前後順序不可隨意調換,不能選擇目錄層級 npm詳細使用文件 全域性安裝 npm in...

php陣列生成樹結構資料返回

array array 1 array id 1,pid 0,name a 2 array id 2,pid 0,name b 3 array id 3,pid 1,name c 4 array id 4,pid 3,name a 5 array id 5,pid 4,name e 1.如果不使用 ...

Oracle 父子樹形結構查詢,行專列 列轉行查詢

本文僅記錄下 之前 所用的一些 oracle 資料庫函式 1.父子屬性結構查詢,例如,父子選單頁等 oracle中start with connect by prior 用來對樹形結構的資料進行查詢。其中start with 給出的是資料搜尋範圍,顧名思義,從 作為查詢的起點,connect by後...