2017-05-26 7 views
1

Ich bin nicht sicher, was der richtige Weg ist, dies zu tun.Gibt alle Werte zurück, wenn Parameter mit SQL NULL ist?

Ich möchte grundsätzlich alle Werte zurückgeben, wenn der Wert für bestimmte Filter nicht definiert ist.

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

um filter3 wurde nicht definiert i alle Werte zurückgeben möchten, unabhängig, was ihre filter3 Wert ist:

Get-Anfrage wird mit Filtern wie folgt hergestellt. Einfache Logik richtig.

Aber wenn ich versuche, in SQL zu implementieren, bleibe ich stecken.

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

Wie kann ich SQL oben ändern, um auf undefined/blank value zu antworten und alle zurückzugeben. Oder ist das überhaupt richtige Strategie?

+0

Wenn Sie die Anfrage bearbeiten, warum nicht einfach einen anderen SQL-Befehl verwenden? Oder bauen Sie den Befehl basierend auf den Parametern auf, die Sie haben? Was verwendest du am Backend? –

+0

Was Sie vorschlagen, könnte der bessere Weg sein, können Sie ein Beispiel zeigen. Das ist, dass mir etwas eingefallen ist, also mache ich es. Anderes wurde benutzt, wenn sonst für jede Bedingung, die überhaupt nicht skaliert. Fünf Parameter würden 5 if else-Anweisungen bedeuten. –

Antwort

2

Wenn Sie Indizes haben, ist es besser, das benutzerdefinierte SQL zu erstellen. Aber, wenn die Leistung weniger ein Problem ist (sagen wir die Tabelle klein ist), tun nur den expliziten Vergleich:

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

Wenn der Wert in so etwas passiert ist, anders als NULL, dann stellen Sie die Logik entsprechend. Zum Beispiel:

WHERE ($1 = '' or filter1 = $1) AND 
     ($2 = '' or filter2 = $2) AND 
     ($3 = '' or filter3 = $3) AND 
     ($4 = '' or filter4 = $4); 
+0

Normalerweise denke ich, es ist leer, was würde ich für leere Zeichenfolge oder Nummer setzen. In Nodejs ist dies der Code: 'db.query (" SELECT * FROM TABLE WHERE C_1 = $ 1 UND C_2 = $ 2 ", ['test', undefined]") '... nicht sicher, was' undefined' wird –

Verwandte Themen