2014-01-07 2 views
1

У меня есть некоторые квартиры, которые клиент может выбрать - на основе некоторых параметров.несколько фильтров за штуку

, например:

он ищет квартиру, то есть:

  1. 4 комнаты
  2. балкон

Эти параметры, сохраняются в таблице как таковой (под названием tblApartmentFilters):

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

где -

  1. apartmentID соответствует apartmentID в tblApartments таблице
  2. filterID определяет вопрос (например: сколько комнат вы хотите? или вы хотите балкон), сохраненный в tblFilters
  3. filterOptionID представляет собой ответ на один из вопросов. поэтому в приведенном выше примере это будет filterOptionID # 7, который [4 комнаты] или элемент № 18, который является [да - нужен балкон]

Теперь ... мне нужно попробовать создать запрос SELECT поиск квартир, соответствующих параметрам. он отлично работает с одним параметром, но как только приходит 2-й, он терпит неудачу. и я понимаю, почему:

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

Смежные вопросы