关于sql:每个项目多个过滤器

multiple filters per item

我有一些公寓,客户可以根据一些参数选择。

例如:

他正在找一套公寓,有:

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

    1
    2
      id (INDEX)     |    apartmentID    |   filterID    | filterOptionID
    ----------------------------------------------------------------------

    何处

  • apartmentid与tblApartments表中的apartmentid匹配
  • filterID定义了这个问题(例如:你想要多少房间?或者你想要一个阳台),保存在tblFilters中。
  • filterOptionID代表其中一个问题的答案。所以在上面的例子中,它是filteroptionid 7,即[4个房间]或item 18,即[yes-want a balancy]
  • 现在。。。我需要尝试创建一个选择查询来搜索与参数匹配的公寓。它在一个参数下工作得很好,但是一旦有第二个参数出现,它就会失效。我明白原因:

    1
    2
    3
    4
    5
    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….

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

    非常感谢!


    你可以用它来写一些东西,假设你想要有4个房间和1个阳台的公寓。

    1
    2
    3
    4
    5
    6
    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)