資料庫表單的多層分類搜尋 – 資料庫連結篇

上一次我介紹了多層目錄的遞迴演算法,其實這已經是基礎中的基礎了。但是在不得已的硬體限制下,或許有另一種寫作簡單方式,讓我現在來告訴大家。


當伺服器主機記憶體不足時,通常會把硬碟當記憶體用,但是這樣是極端耗費系統資源的,別忘了伺服器還有可能當 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 方法囉?

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar