2014-01-07 98 views
1

我有一些公寓,客戶可以選擇 - 基於一些參數。每個項目多個過濾器

例如:

他正在找房子,具有:

  1. 4間
  2. 陽臺

這些參數,保存在一個表作爲這樣的(稱爲tblApartmentFilters):

id (index)  | apartmentID | filterID | filterOptionID 
---------------------------------------------------------------------- 

哪裏 -

  1. 的apartmentID的apartmentID匹配在tblApartments
  2. filterID定義如問題(:有多少房間,你想要什麼?或者你想要一個陽臺),保存在tblFilters
  3. filterOptionID代表了其中一個問題的答案。所以在上面的例子中 - 它將是[4房間]的filterOptionID#7或是[是 - 想要陽臺]的項目#18

現在...我需要嘗試創建一個SELECT查詢搜索與參數匹配的公寓。它只用一個參數就可以很好地工作 - 但是一旦進入第二個參數 - 它就會失敗。我明白爲什麼:

SELECT * FROM tblApartments 
INNER JOIN tblApartmentFilters ON tblApartments.aptID = tblApartmentFilters.aptID 
WHERE active = 1 
AND filterID = 1 AND filterOptionID = 7 -- this is for the 4 rooms 
AND filterID = 2 AND filterOptionID = 18 -- this is for the balcony 

現在顯然2個參數以上不工作 - 因爲filterID列不能是1和2在同一時間....

等都可以有人指導我如何加入到此過濾器表中,以便能夠找到參數請求的一個或多個匹配項?

非常感謝提前!

回答

1

你可以用EXISTS寫一些東西,假設你想要有4個房間和1個陽臺的公寓。

SELECT * FROM tblApartments t  
WHERE active = 1 
    AND EXISTS (SELECT f.aptID FROM tblApartmentFilters f 
       WHERE f.filterID = 1 AND f.filterOptionID = 7 AND f.aptID = t.aptID) 
    AND EXISTS (SELECT f.aptID FROM tblApartmentFilters f 
       WHERE f.filterID = 2 AND f.filterOptionID = 18 AND f.aptID = t.aptID) 
+0

完美,謝謝! – kneidels