做**的時候有時需要實現乙個樹形列表,類似目錄那樣的。最好的建立方法就是採用指向父節點的指標的結構建立表。
表的結構如下:(表名為xx)
字段
型別
null
預設
注釋
cidint(11) 否
主鍵 pid
int(11) 否
0 父類別的cid,=0表示該項為頂層類別。
name
varchar(64) 否
類別名。
查詢時只需要乙個sql語句就能查詢出所有節點:
select distinct c2.cid, c2.pid, c2.name
from xx c1, xx c2
where c2.pid=c1.cid or c2.pid=0;
這樣查詢出來的結果就是乙個鏈式儲存的,指向父節點指標的樹了,現在我們要做的就是把這棵樹變成普通的樹,這樣我們就可以方便的輸出了。
下面是用php實現的轉換**:
查詢出來的結果存在 $this->data 裡,格式如下:
array<?php([0] => array ( [cid] => 1, [pid] => 0, [name] => 運動 )
[1] => array ( [cid] => 2, [pid] => 0, [name] => 遊戲 )
[2] => array ( [cid] => 3, [pid] => 0, [name] => 程式 )
[3] => array ( [cid] => 4, [pid] => 1, [name] => 足球 )
[4] => array ( [cid] => 5, [pid] => 1, [name] => 籃球 )
[5] => array ( [cid] => 6 [pid] => 1 [name] => 羽毛球 )
[6] => array ( [cid] => 7 [pid] => 2 [name] => 即時戰略類 )
[7] => array ( [cid] => 8 [pid] => 2 [name] => rpg類 )
[8] => array ( [cid] => 9 [pid] => 7 [name] => 紅警 )
[9] => array ( [cid] => 10 [pid] => 7 [name] => 星際 )
[10] => array ( [cid] => 11 [pid] => 7 [name] => 魔獸 )
[11] => array ( [cid] => 12 [pid] => 8 [name] => 仙劍 )
)
// 測試輸出,把結果輸出成巢狀的/n";
}echo "/n";}}
/*** 在當前節點處遞迴建立樹。
** @param $tree array, 當前節點。
* @param $pa array, 祖先節點表,老的排前面。
* @param $i int, $pa的當前位置。
* @param $n int, 要插入的節點。
** @return void
*/function create_tree(& $tree, $pa, $i, $n)
// 遞迴到下一級祖先處
$next=$pa[$i];
create_tree($tree[$next], $pa, $i+1, $n);
}$plist=array();
$list[0]=array();
// 重排資料庫查詢結果,使得$data的下標即為$cid。
// 並生成樹,存入$list中($list[0])為數的根節點。
foreach ($this->data as $v)
preorder($list, $data);
?>
呼叫完create_tree以後,$list 裡是這樣的:
array輸出結果:(後面數字是它的cid)([0] => array
([1] => array
([4] => array ( )
[5] => array ( )
[6] => array ( )
)[2] => array
([7] => array
([9] => array ( )
[10] => array ( )
[11] => array ( )
)[8] => array
([12] => array ( )))
[3] => array ( )
))
遊戲(2) »
rpg類(8) »
程式(3) »
沒怎麼整理,等有時間了再好好整理一下。
資料庫 樹型結構 TTreeView篇
1.首先看一下我的資料庫結構 id int group name int parent id int 不用解釋,相信大家一看就明白。2.delphi中新建乙個datemodel,命名為dm,和乙個窗體frmmain 在dm中放入tadoconnection,和乙個tadodataset,並連線上資料...
基於資料庫的樹型結構方案(儲存過程實現)
樹型結構是遞迴演算法的經典例項 只怪非cs的我沒有紮實的資料結構功底,鼓搗了兩個半天 p 有個新聞分類表category,如圖,現在想取出分類資料後以樹型展開並在下拉框中顯示出來。本來的方案是取出資料後在中間層對datatable排序,格式字串等放在一起操作的,後來感覺中間層負擔太重,所以把排序放到...
樹型控制項實現資料庫的訪問
本人意圖將資料庫中的內容加入樹型控制項中,通過建立資料庫,再與樹型控制項相連,實現資料庫的訪問。查詢結構清晰明了,操作方便。現將其方法闡述如下 1 建資料庫 建立access資料庫,資料庫結構和內容見程式包access檔案。2 建立單文件不基於資料庫支援的應用程式工程,檢視類繼承於cformview...