分類的方法

    我的分類的心得. 本文所寫的方法,適合中小型數據庫的分類,對於分類的級數和個數並沒有限制.但是隨着分類的增多,對於緩存的佔用會加大.當然,幾十個甚至上百個分類應該還是承受的了的.這對於中小型網站來說夠了.所謂具體問題具體分析了.

    最近在寫網上商店,分類的方法想了很久.有一種從書上看來的方法是用位編碼.假設用32位的整數來編碼,一級分類佔4位,後面四級每級7位.這樣一級可以有24 =16個分類,後面四級每級有27 =128個分類.它這樣分的目的在於以下兩個問題:
1.如何快速地知道某個類別是否屬於另一個類別的子類
2.如何快速地知道某個類別下的所有商品
採用的它的"位與算法"來實現.
    但我自己並不是很清楚這種方法.對於其中的程序也沒有時間細看了.因爲工作比較緊,以後再說了.最終我還是採用了父子類別的分類方法.配合設置多幾個字段,可以實現上面的兩個問題.再配合application緩存的應用,可以少佔用些查詢時間和資源.(注:application緩存的方法是從動網論壇的代碼裏學過來的.)
在網上查到了一種搜索類別路徑的方法,及查找所有子類別的方法.這兩種方法都是用到了循環嵌套查詢,對於它的優化,我選擇了使用設置多幾個字段來減少查詢的次數.具體實現方法爲:

    數據庫字段設置:ID,ParentID,ParentPath,Depth,Child,Name.其中ParentPath是從一級分類到當前分類的父分類的ID的依次排列.Depth爲當前類別的深度.定義一級分類的深度爲1.Child是當前分類中子分類(不包括孫及以下分類)的個數.目前我還沒有用到Child這個屬性,不過以後可能會用到.
如果要實現較方便的操作,一定要配合application緩存.這樣一些變量就不用再從數據庫讀取了,大大的節省了時間.
    Cache中包括了每一個類別的上述信息,這在編輯類別時尤爲重要,可以很方便的更改所屬類別等.
    對於目錄樹的實現,我在網上找到了一種用js實現的的下拉菜單目錄樹.只要給定ID,ParentID,Name就可以了.非常的好用.真是省了我一個大麻煩.具體方法另外再寫一篇.
    要注意的幾點:
1.緩存在更新數據庫之後一定要更新,否則會出錯.可以針對不同類別只更新其本身及父類的緩存.
2.由於根類是不存在的,一個虛擬的root,所以對於一級分類的相關屬性要注意其合理性.例如,它的父類是ROOT,ParentID=0,ParentPath=0這和二級分類相對於一級分類的情況有相似也有不同處.所以需要分情況討論.
3.對於ParentPath,我目前是用","來分隔每個ParentID,這樣做的好處是,在使用查看當前類別的Path的時候,SQL查詢中,只要使用 SELECT ... FROM ... WHERE ID IN (....) 這樣的語句就可以了.而在確認其有效性的時候,記得要在首尾加上分隔符","例如判斷一個ID是否在某類的ParentPath中等.無論何時,都用InStr(","&ParentPath&"," , ","&ID&",")>0 來判斷,否則可能出現1,11,111這種分不清的狀況.雖說錯誤很簡單,但卻是易忽略的東東.

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章