mysql - 我的 sql 查询与可能的组合

标签 mysql ibatis

我有搜索要求,需要执行出租房屋的搜索选项。

城市、价格范围、房间数是标准。

如果用户未提及任何详细信息并单击提交,我们必须显示所有结果。

如果用户提到的价格范围例如是 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/

相关文章:

MySQL INSERT 如果主键值之一不匹配

MySQL:用最后一个已知值填补空白

java - 如何在 SQL Server 中插入换行符

java - MyBatis 多结果集与过程

mybatis - 什么时候使用$ vs #?

php - 服务器端集群谷歌地图标记

mysql - 错误 : Failed to read auto-increment value from storage engine

java - 比较街道名称

c# - 连接mysql和c#

java - 如何对扩展 SqlMapClientDaoSupport 的 DAO 进行单元测试