2014-01-07 4 views
1

일부 매개 변수를 기반으로 고객이 선택할 수있는 아파트가 있습니다.항목 당 여러 개의 필터가 있습니다.

예를 들어

:이

그는 아파트를 찾고있다 :

  1. 4 실
  2. 발코니는

이러한 매개 변수, 같은 테이블에 저장됩니다 (tblApartmentFilters) :

id (index)  | apartmentID | filterID | filterOptionID 
---------------------------------------------------------------------- 
얼마나 많은 객실 당신이 원하는 않습니다 : -3210

apartmentID는 tblApartments 테이블

  • filterID에서 apartmentID 일치

    1. 질문 (예를 정의? 또는 발코니를 원하십니까?)
    2. filterOptionID은 질문 중 하나에 대한 답을 나타냅니다. 그래서 위의 예에서는 filterOptionID # 7이 [네 방]이거나 항목 # 18은 [예 - 발코니가 필요합니다]

    지금 ... 내가 SELECT 쿼리를 만들려고합니다. 매개 변수와 일치하는 아파트를 검색하십시오. 그것은 하나의 매개 변수로 훌륭하게 작동하지만 2 등이 오자 마자 실패합니다. 에서 FilterId의 열은 1 동시에 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 
    

    지금 분명이 매개 변수에 대한 위의 나던 작업 : 그리고 난 이유를 이해 이 필터 테이블에 가입하여 매개 변수 요청에 대해 하나 이상의 일치 항목을 찾을 수 있습니까?

    미리 감사드립니다.

  • 답변

    1

    4 개의 방과 1 개의 발코니가있는 아파트를 원할 경우 EXISTS를 사용하여이 내용을 쓸 수 있습니다.

    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

    관련 문제