每个项目多个过滤器

时间:2014-01-07 20:06:33

标签: sql sql-server

我有一些客户可以选择的公寓 - 基于一些参数。

例如:

他正在寻找一套公寓:

  1. 4个房间
  2. 阳台
  3. 这些参数保存在表格中(称为tblApartmentFilters):

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

    其中 -

    1. apartmentID与tblApartments
    2. 上的apartmentID匹配
    3. filterID定义了问题(例如:您想要多少个房间?或者您想要一个阳台),保存在tblFilters
    4. filterOptionID代表其中一个问题的答案。所以在上面的例子中 - 它将是filterOptionID#7,它是[4个房间]或项目#18,它是[是 - 想要一个阳台]
    5. 现在......我需要尝试创建一个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
      

      现在显然上面的两个参数都不起作用 - 因为filterID列不能同时为1和2 ....

      那么有人可以指导我如何加入此过滤器表,以便能够为参数请求找到一个或多个匹配项吗?

      提前多多感谢!

1 个答案:

答案 0 :(得分: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)