mysql基于多个参数实现查询

时间:2017-08-23 12:43:22

标签: mysql

您好我在我的代码中实现了一个过滤器功能。所以这是场景。

让我们说用户选择四个参数,他想根据用户选择或输入这四个参数的结果,所以我会这样做

select * from table where field1 = "f1" and field = "f2" and field3 = "field3" and field4 = "field4"

问题是如果我收到两个参数然后该怎么办?

一种解决方案是我编写多个查询,并根据用户选择运行该查询。

但是在mysql中还有其他方法可以解决这个问题吗?我的意思是有这样的东西

select * from table where field1 = "f1" and field = "f2" and field3 = "null" and field4 = "null"

但是这个null不会影响整个查询并始终返回true

1 个答案:

答案 0 :(得分:2)

一种常见的方法是在每一个中包含空/空检查。 (无论是使用null还是空字符串,通常取决于如何将值传递给SQL。)

我们以一个参数为例:

SELECT * FROM SomeTable WHERE SomeField = ? OR ? IS NULL

如果从代码(PHP?)中为这两个查询参数分配了相同的值,那么此处的逻辑只会在SomeField上过滤,如果该值不为空。如果为null,则? IS NULL检查将匹配每条记录。

只需将括号括在括号中即可附加更多内容:

SELECT * FROM SomeTable WHERE
  (SomeField = ? OR ? IS NULL) AND
  (AnotherField = ? OR ? IS NULL)

依此类推,您可以选择任意数量的可选过滤器。这样你只需要一个查询,每个“过滤器”都是可选的。传递过滤器值将对该字段进行过滤,传递空值将忽略该过滤器。