我有搜索要求,为出租屋做搜索选项。
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};
我们需要创建表格城市吗?
是否可以在列表中发送值,并根据选项列出值。
是正确的吗?
答案 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