2017-05-26 2 views
1

私はこれを行う正しい方法がわかりません。SQLを使用してパラメータがNULLの場合、すべての値を返しますか?

基本的には、特定のフィルタの値が定義されていない場合は、すべての値を返す必要があります。

Getリクエストは、次のようにフィルタを用いて構成されています

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を変更して、未定義/空白の値に応答してすべてを返すにはどうすればよいですか。または、これは正しい戦略でもあります。

+0

リクエストを処理する場合は、別のSQLコマンドを使用するだけでなく、または、あなたが持っているパラメータに基づいてコマンドを構築しますか?バックエンドで何を使用していますか? –

+0

あなたが示唆していることはよりよい方法かもしれません、あなたは例を表示できますか?これは私がそれをやっているので何かが心に浮かんだことです。それ以外の場合は、他のすべての条件のためのスケールされていませんでした。 5つのパラメータは、else文の場合は5を意味します。 –

答えて

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

私はそれが空白だと思うのですが、空白の文字列や数字には何を置きますか? nodejでは、これはコードです: 'db.query(" SELECT * FROM TABLE WHERE C_1 = $ 1 AND C_2 = $ 2 "、['test'、undefined] ')' ... '' undefined' –

関連する問題