無限級分類的實現

2021-05-02 19:02:52 字數 1419 閱讀 7862

在我們做**的時候,不管是新聞系統還是產品系統,或者是部落格,論壇等等,都少不了與分類打交道。有時候我們經常說分幾級分類,一般分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...