繁体   English   中英

每个项目多个过滤器

[英]multiple filters per item

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

例如:

他正在寻找有以下设施的公寓:

  1. 4间
  2. 阳台

这些参数按如下方式保存在表中(称为tblApartmentFilters ):

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

哪里-

  1. apartmentID与tblApartments表中的apartmentID匹配
  2. filterID定义了保存在tblFilters的问题(例如:您想要几个房间?还是您想要一个阳台)
  3. filterOptionID代表对其中一个问题的答案。 因此,在上面的示例中-它是filterOptionID#7,它是[4个房间]或项目#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。

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

提前谢谢了!

您可以使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM