用C 和資料庫實現無限級分類法

2021-03-31 08:56:30 字數 2194 閱讀 7129

在做軟體是,碰上這個問題,要把乙個商店的分類用樹形來表示。

商品分類應該是無限子類劃分的,怎樣設計好一些。用資料庫還是用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...