我的SQL查询可能的组合

时间:2012-10-09 09:13:11

标签: mysql ibatis

我有搜索要求,为出租屋做搜索选项。

city,price range,numberOfRooms是标准。

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

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

我们需要创建表格城市吗?

是否可以在列表中发送值,并根据选项列出值。

是正确的吗?

1 个答案:

答案 0 :(得分:1)

这是另一种方法,通过使用可选参数,例如:

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值传递整个谓词,例如{{1因为AND (@city IS NULL OR city = @city)计算结果为true,所以将被评估为true而不进入第二个谓词OR city = @city。与其他参数相同,如果所有使用值@city is NULL传递给查询的参数NULL子句将被评估为WHERE,它始终是真正的谓词,那么就像它的行为一样没有呈现并返回所有行。

请注意,在价格范围参数的情况下,我使用了flag参数来禁用两个参数WHERE 1 = 1@minPrice