在我們做**的時候,不管是新聞系統還是產品系統,或者是部落格,論壇等等,都少不了與分類打交道。有時候我們經常說分幾級分類,一般分2-3級,具體視情況而定,但是這樣的做法非常死板,不夠靈活,因為不是任何類別下的分類都有子類,孫類……,為了能夠使分類靈活,我們經常採用的是無限級分類。
無限級分類主要思路有兩種:一是使用遞迴;二就是非遞迴,我比較喜歡這種,畢竟效率是關鍵。
表結構設計:
首先建立乙個分類表category:
設計如下:
--parentid 父節點的id
--categorypath 節點路徑
--categoryname 類別名稱
--categorylevel 類別級別(主要為了操作方便才設定此欄位)
--categorydescn 這個是類別描述,沒啥好說的了,主要做搜尋優化的時候用到,填充mata關鍵字
資料顯示如下(僅僅是個例子,現實中可能不這麼分):
水果--包括蘋果,橘子;
蘋果又分為紅富士和喬納金兩個品種;
喬納金又分為山東和北京的喬納金;
山東喬納金又分為濟南喬納金……
[圖2]
產品表product:
--categoryid沒啥好說的,主要是作為category表的外來鍵,注意有categorypath這個欄位的用意。
想實現的功能:
1.某乙個類別下的子類
比方說水果這個類下,蘋果,橘子著兩個類。
select categoryid,categoryname from category where parentid=水果的categoryid//由圖2可以看到,parentid為1的有蘋果和橘子。
2.生成分類所在的路徑,比方說 水果》蘋果》喬納金》山東喬納金》濟南喬納金
主要思想是先得到當前類所對應的categorypath,然後把最後乙個「,」去掉,foreach得到全路徑
categorypath = categorypath.substring(0, categorypath.lastindexof(','));//得到categorypath
string arrcategory = categorypath.split(',');//以逗號分割
foreach (string s in arrcategory)
else
}
3.得到任意分類下的所有產品資訊:
得到該類別對應的categorypath,然後用下面sql語句查詢即可
select * from product where categorypath like '" + cpath + "%'
未解決的問題:如何判斷乙個類是否是這個分支的最末級類?比方說水果》橘子,橘子下面沒有東西了,那麼橘子這個類就是最末級分類,而蘋果的末級分類是水果》蘋果》喬納金》山東喬納金》濟南喬納金,有明白的大俠講解一下,不勝感謝!
無限級分類實現思路
關於該問題,暫時自己還沒有深入研究,在網上找到幾種解決方案,各有優缺點。第一種方案 使用遞迴演算法,也是使用頻率最多的,大部分開源程式也是這麼處理,不過一般都只用到四級分類。這種演算法的資料庫結構設計最為簡單。category表中乙個欄位id,乙個欄位fid 父id 這樣可以根據where id f...
無限級分類實現思路
關於該問題,暫時自己還沒有深入研究,在網上找到幾種解決方案,各有優缺點。第一種方案 使用遞迴演算法,也是使用頻率最多的,大部分開源程式也是這麼處理,不過一般都只用到四級分類。這種演算法的資料庫結構設計最為簡單。category表中乙個欄位id,乙個欄位fid 父id 這樣可以根據where id f...
無限級分類
相信在實際專案中很多人在做專案的時候都會用到無限級分類,無限級分類說白了就是乙個遞迴,遞迴在我們的專案開發中起到很重要的作用,如 麵包屑導航等。下面我們演示乙個遞迴的案例 area array array id 1,name 安徽 parent 0 array id 2,name 海淀 parent...