我有搜索要求,需要执行出租房屋的搜索选项。
城市、价格范围、房间数
是标准。
如果用户未提及任何详细信息并单击提交,我们必须显示所有结果。
如果用户提到的价格范围例如是 5000 到 10000,那么它必须给出考虑所有城市的结果,所有可能的 1bhk、2bhk、3bhk...
如何编写涵盖所有可能性的单个查询
我心里有这个想法..
让我们只考虑城市和价格选项,没有其他选项可以提供更好的解释。
我创建了一个名为 city 的表
city
option cityname
1 delhi
2 hyderabad
3 bangalore
4 delhi
4 hyderabad
4 bangalore
SELECT *
FROM rental
WHERE city IN (select cityname from city where option=#{option_value}) and price>=#{minPrice} and price<=#{maxPrice};
我们需要创建表城市吗?
是否可以发送列表中的值,并根据选项这些列表值应该出现。
正确吗?
最佳答案
这是另一种方法,通过使用可选参数,例如:
SELECT *
FROM rental
WHERE 1 = 1
AND (@city IS NULL OR city = @city)
AND (@PricerangeFlag IS NULL OR price BETWEEN @minPrice AND @maxPrice)
..
如果任何参数@city
、@pricerangeFlag
或任何其他参数以这种方式传递给此查询,则以NULL
值传递那么整个谓词,例如 AND (@city IS NULL OR city = @city)
将被评估为 true,而不进入第二个谓词 OR city = @city
因为 @city is NULL
计算结果为 true。与其他参数相同,如果所有参数都以 NULL
值传递给查询,则 WHERE
子句将被评估为 WHERE 1 = 1
这始终是 true 谓词,就像它没有出现一样并返回所有行。
请注意,在价格范围参数的情况下,我使用了一个标志参数来禁用两个参数 @minPrice
和 @maxPrice
关于mysql - 我的 sql 查询与可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12796601/