2017-05-26 114 views
1

我不知道什麼是正確的方法來做到這一點。如果參數爲NULL,使用SQL返回所有值?

我基本上想要返回所有的值,如果沒有定義某個過濾器的值。

Get請求與過濾器了這樣:

url.com?filter1=abc&filter2=123&filter4=33

從而filter3沒有定義,我想返回所有值的過濾器3的值是無論使用什麼。簡單的邏輯正確。

但是,如果我嘗試在SQL中實現,我卡住了。

SELECT * from TABLE_NAME WHERE filter1 = $1 AND filter2 = $2 AND filter3 = $3 AND filter4 = $4

如何修改上面的SQL以響應未定義/空值並返回全部。或者這是甚至正確的策略。

+0

如果您在處理請求,爲什麼不使用不同的SQL命令?或者根據你有的參數建立命令?你在後端使用什麼? –

+0

你的建議可能是更好的方法,你能舉個例子。這是一些想到的東西,所以我正在做。其他的則用於其他情況,但對於每一種根本不能縮放的情況。五個參數意味着5條if else語句。 –

回答

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); 
+0

通常我認爲它是空白的,我會爲空白字符串或數字放什麼。在nodejs中,這是代碼:'db.query(「SELECT * FROM TABLE WHERE C_1 = $ 1 AND C_2 = $ 2」,['test',undefined]「)......不確定'undefined'變成了什麼 –

相關問題