在做軟體是,碰上這個問題,要把乙個商店的分類用樹形來表示。
商品分類應該是無限子類劃分的,怎樣設計好一些。用資料庫還是用xml。
由於以前搞設計,程式設計方面較生了,.***也則開始學,覺得還是用資料庫比較熟悉些。由於以前沒這方面經驗,所以對資料庫設計感到比較竦手。
想了很多,比如鍊錶,用乙個parent(父關係)、child(子鏈結),後來捨棄了child,就用parent,只認父親,於是設計資料庫格式如下:
表名:sort
字段:sortid(主鍵,自增長)、parentid(父類id號)、sortname(名稱)、isend(是否為最終類,因設計時考慮最終類下不能再分,最終類下只能具體商品。相反不是最終類下,只能再設類別,而不能下設具體商品)
資料庫建好了,這是最簡結構。現在說明一下庫的使用方法。
sort表最重要的字段就是parentid,用於鏈結分類的關係。比如家族,你只要認準你父親,而不必認爺爺,爺爺是父親認的,即你-->父親-->爺爺。隻經認準各自的父親(parent),這條鏈就鏈在一起了。再進一步,爺爺可以有兄弟,但這不是你考慮的,只要認得祖宗,而不必顧及傍支(即爺爺兄弟下的後代),傍支是別人考慮的事。
乙個簡單的新增樹的函式
(是個思路,其實到現在還不完全)
nodeindex:父節點在陣列中的位置;
nodename:node的名稱;
public void addnode(int nodeindex, string nodename)
嘿嘿,這是個不成器的函式,看似實現了,其實還沒有。
因為從資料庫中讀出的了不會告知你應該在陣列的那條下增加節點。從資料庫中讀出來的只有自身id號及 parentid。這要怎麼實現,確實傷腦,因為陣列中看不到任何關於id及parentid資訊。
這個函式還要大大修改,在什麼地方可以使每個node具有id及parentid屬性。我終於想辦法編寫自己的treenode元件了。
接下來,就得為treenode做些擴充。
新建元件,定義乙個treenode的派生類:
public class exnode : system.windows.forms.treenode
然後定義乙個結構:
public struct sort
該結構和資料庫中相吻合。
該類的**較簡單,如下:
using system;
using system.collections;
using system.***ponentmodel;
using system.drawing;
using system.data;
using system.windows.forms;
namespace crystalbiz
///
///exnode 的擴充套件
///
public class exnode : system.windows.forms.treenode
set
}
public exnode()}}
定義好的的類,就只要把原來的treenode換成exnode就行了。
這個addnode函式現在可以改了。
///
///
在treeview中增加node,並把node加入到陣列,方便查詢
///
private void addnode(sort st)
else
}
// 在找到的父節點下新增新節點
pnode.nodes.add(addnode);}}
最後一步了,勝利在望
///
///
重設商品分類的 treeview
///
resetsortview() 函式
///
#region resetsortview()函式實現
private void resetsortview()
set
}並在新增node時設定:
// 新增到treeview和陣列
arrnode.add(nd);
if (nd.sort.parentid == 0)
else
}pnode.nodes.add(addnode);
addnode.idpath = pnode.idpath + "//" + nd.sort.parentid.tostring();
}
PHP單次資料庫查詢實現無限級分類
這裡使用一張簡單的地區表舉例,表字段如下 使用sql select id,parentid,name from area 查詢得出的資料形如 array 3362 1 array 3 2 array 3 3 array 3 4 array 3 使用函式xmsb getdatatree desc xm...
一種更為高效的資料庫無限級分類表設計
一般地,大家在資料庫設計無限級分類表時只是多新增了乙個parent id欄位,這樣如果要讀取所有分類的話只能進行遞迴讀取資料庫表操作,這樣的效能可想而知。先看個表及測試資料 idname parent id 1clothing 衣服 02 men s 13 women s 14 suits 套裝 2...
收集 各式各樣的 無限級分類 的資料庫設計方案
第一種方案 表為兩張,一張分類表,一張資訊表。表1 id int 10 cid tinyint 3 title varchar 255 表2 cid tinyint 3 parentid tinyint 3 order tinyint 3 name varchar 255 這樣可以根據cid par...