我有一些客户可以选择的公寓 - 基于一些参数。
例如:
他正在寻找一套公寓:这些参数保存在表格中(称为tblApartmentFilters
):
id (index) | apartmentID | filterID | filterOptionID
----------------------------------------------------------------------
其中 -
tblApartments
表filterID
定义了问题(例如:您想要多少个房间?或者您想要一个阳台),保存在tblFilters
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
现在显然上面的两个参数都不起作用 - 因为filterID列不能同时为1和2 ....
那么有人可以指导我如何加入此过滤器表,以便能够为参数请求找到一个或多个匹配项吗?
提前多多感谢!
答案 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)