我不确定这样做的正确方法是什么。
如果没有定义某个过滤器的值,我基本上想要返回所有值。
使用以下过滤器获取请求:
url.com?filter1=abc&filter2=123&filter4=33
因为未定义filter3
我想要返回所有值,无论它们的filter3值是什么。简单的逻辑。
但是如果我尝试在SQL中实现,我就会陷入困境。
SELECT * from TABLE_NAME
WHERE filter1 = $1
AND filter2 = $2
AND filter3 = $3
AND filter4 = $4
如何修改上面的SQL以响应undefined / blank值并返回all。或者这是否是正确的策略。
答案 0 :(得分:2)
如果您有索引,最好构建自定义SQL。但是,如果性能不是问题(比如表格很小),那就进行明确的比较:
SELECT *
FROM TABLE_NAME
WHERE ($1 IS NULL or filter1 = $1) AND
($2 IS NULL or filter2 = $2) AND
($3 IS NULL or filter3 = $3) AND
($4 IS NULL or filter4 = $4);
如果值以NULL
以外的值传递,则相应地调整逻辑。例如:
WHERE ($1 = '' or filter1 = $1) AND
($2 = '' or filter2 = $2) AND
($3 = '' or filter3 = $3) AND
($4 = '' or filter4 = $4);