我想根据价格,品牌和类别过滤产品。但它们都不是必需的。因此,用户可以仅根据价格或价格和品牌来过滤产品。如何仅使用查询在 mySQL 中编写代码。我进行了很多搜索,但是在存储过程的帮助下找到了解决方案。
如果我编写此查询select * from product where brandid = 1 AND price = 10 and categoryid = 5
。它将获取2个满足where子句的产品。
但是,如果用户不想根据品牌来过滤产品(让我们说),那么查询将是什么? select * from product where brandid = null AND price = 10 and categoryid = 5
...这不起作用,因为我不想搜索具有brandid null的产品。我想要的是从where条件中删除该特定子句。所以我期望的查询是select * from product where price = 10 and categoryid = 5
答案 0 :(得分:1)
以增量方式构造查询。这里是Ruby(因为您没有标记编程语言),但是逻辑完全独立于语言。
query = "SELECT * FROM products"
filters = []
params = []
if price_min
filters << "price >= ?"
params << price_min
end
if price_max
filters << "price <= ?"
params << price_max
end
if brand
filters << "brand = ?"
params << brand
end
# ...
unless filters.empty?
query += " WHERE " + filters.join(' AND ')
end