您好我在我的代码中实现了一个过滤器功能。所以这是场景。
让我们说用户选择四个参数,他想根据用户选择或输入这四个参数的结果,所以我会这样做
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
答案 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)
依此类推,您可以选择任意数量的可选过滤器。这样你只需要一个查询,每个“过滤器”都是可选的。传递过滤器值将对该字段进行过滤,传递空值将忽略该过滤器。