上一次我介紹了多層目錄的遞迴演算法,其實這已經是基礎中的基礎了。但是在不得已的硬體限制下,或許有另一種寫作簡單方式,讓我現在來告訴大家。
當伺服器主機記憶體不足時,通常會把硬碟當記憶體用,但是這樣是極端耗費系統資源的,別忘了伺服器還有可能當 Web Server、Email Server 使用,在多使用者重覆達行遞迴程式時,那可是不容小看的負擔。
於是,我們就利用資料庫的空間來換取記憶體空間。
怎麼說呢?
其實很簡單,只要在資料庫加一個欄位,記錄自己所有的上層目錄即可。
同樣以上次的範例,我再來解說一次:
女性用品 | ->保養品 | ->臉部 |
->身體 | ||
|
||
->背包 | ->水餃包 | |
->側揹包 | ||
->方包 |
資料庫:CATA
欄位1 :NAME (分類名稱)
欄位2 :PARENT (上層分類名稱)
欄位3 :PARENT_LINK (所有上層分類名稱)
PARENT_LINK 記載的就是自己所有的上層目錄,以「方包」為例,方包的PARENT_LINK 就是:
“女性用品,背包”
當每個分類的 PARENT_LINK 都建好之後,我要找「背包」之下所有的分類名稱時,只要下一段 SQL Command:
SELECT NAME FROM CATA WHERE PARENT_LINK LIKE '%背包%'
看,是不是簡單很多,相信連初學者都看的懂。^_^
使用這個方法雖然方便,但同時也有一個缺點。就是 PARENT_LINK 的維護相當不容易,當所有分類有任何變動時,必須同時去更新每一個分類的 PARENT_LINK,才能確保這個分類的連結是正確的,這樣程式寫起來或許比遞迴還要多。
當然使用遞迴或這個方法各有優缺,就看您自己的需求而定囉!
2 comments On 資料庫表單的多層分類搜尋 – 資料庫連結篇
終於學到這招了,我以前都是用笨方法,更浪費資源。
受用無窮,感恩。
突然想到,當’男性用品’下也有’背包’,
或是有’收藏’→’舶來品’→’背包’,
那好像就不適用這簡單的 PARENT_LINK 方法囉?