2013-10-27 104 views
-1

我有一個數據庫設計,其中有一個可以具有多個屬性的產品。我不是在數據庫設計的這麼好,這就是爲什麼這個問題,在數據庫級別或應用程序級別上過濾數據

Product 
------------------------------------ 
Id   Name   Model 
------------------------------------ 
1   Galaxy S  GT-XX123 
2   Galaxy Y  GT-YY123 


Product Specifications 
------------------------------------- 
Spec   Value  ProductId 
------------------------------------- 
OS   Windows   1 
Processor Dual Core   1 
Screen  3.5 Inch   1 
OS   Android 4.1  2 
Processor Quad core   2 

現在我想給用戶一個工具來過濾性能的基礎上的產品,如OS = Android的,處理器=四核心。所以我的問題是,通過編寫複雜的查詢或其優先獲取數據,然後在應用程序級別上過濾數據,從數據庫獲取數據是否是一個好主意?

編輯

我試圖創建通過分析每個過濾器,然後建立一個最終的查詢的查詢,但是當多個過濾器在這種情況下,查詢應用不起作用。我面臨的主要問題是如何從兩個不同的值中選擇單個記錄?所以我試圖解決這個問題,同時這個問題出現在我的腦海中,所以我問,所以不要downvoting幫助,將不勝感激。

+0

取決於您的過濾器的複雜程度 – siledh

+0

可以有多個過濾器可以應用在列表中,如OS屬性,一個用於處理器屬性等等。 –

回答

2

一般來說我會說,如果在SQL過濾很容易,那麼絕對要做那裏的工作。除此之外,您的SQL系統將被調整爲執行這些操作(使用INDEX等)。

第二個考慮因素是,如果您將整個數據集發送回PHP,並且需要將其存儲在內存中,同時循環搜索數據以查找匹配項。

但是,可能有些情況下,最佳解決方案是中間房子,您可以在SQL中進行最高級別的過濾,然後「微調」PHP中的結果。

+0

如果嵌套子查詢的嵌套數量增加更多在我的情況下更像目前我正在形成每個過濾器的子查詢,並且如果應用的過濾器的數量更多,這些將會增加? –

+0

很明顯,SQL代碼可能會變成一種混亂的混亂,既是一種維護噩夢,也是低效的。那時我認爲你必須看兩件事1)我的數據庫結構是否正確? (有什麼我可以做的簡化查詢)和2)是否有辦法在SQL中完成大部分工作,然後將剩餘數據返回到PHP中進行最終過濾。 – danielpsc

0

我相信過濾行爲是一種商業規則。這就是說我也是一個相信業務規則屬於應用程序代碼而不是sql代碼的人。現在我已經說過了,讓我給你我的警告:你應該儘量不要從數據庫中返回比你需要的數據更多的數據。

那麼,那我們呢?我不確定你使用的是什麼技術(看起來可能是我沒有經驗的PHP),但是如果你有一個很好的爲你建立sql的ORM,你應該能夠獲得兩全其美的好處通過將您的過濾規則抽象爲您的應用程序邏輯並將它們與您的ORM一起使用,以確保從數據庫中獲得恰到好處的數據量。

祝你好運!

+0

不,我沒有使用任何ORM,我使用php和普通mysql查詢來獲取數據 –

相關問題