mysql - wenn Wert = 0 verkürzen where-Anweisung

8

Ich frage mich, ob es möglich ist, die Abfrage abhängig von einem variablen Wert auf elegante Weise zu verkürzen.

Zum Beispiel: Ich habe den Wert $var = 0 und ich möchte eine Abfrage senden, die wie folgt aussieht:

%Vor%

Aber mit der $ var! = 1 möchte ich eine Abfrage wie folgt senden:

%Vor%

Also abhängig vom Wert von $ var möchte ich eine der Abfragen ausführen. Sie unterscheiden sich nur vom letzten Ausdruck. Ich fand zwei mögliche Lösungen, aber sie sind nicht elegant und ich mag sie überhaupt nicht.

Eins wird in php gemacht:

%Vor%

Zweitens wird in mysql gemacht:

%Vor%

aber ich mag es nicht - jede Idee verdoppelt Abfragen in einigen Fällen. Kann ich so etwas tun?

%Vor%

Es ist viel kürzer und fügt bei Bedarf einen Teil der Abfrage hinzu. Natürlich ist echte Abfrage viel komplizierter und eine kürzere Anweisung wäre wirklich zu erwarten. Jeder hat eine Idee?

    
Kalreg 10.04.2012, 14:18
quelle

9 Antworten

5

Wenn ich es gut verstehe ..

%Vor%

Magst du es?

    
Paper-bat 10.04.2012, 14:25
quelle
2

Du könntest so etwas auf der SQL Seite haben:

%Vor%

Aber die Leistung könnte beeinträchtigt werden. Ich würde vorschlagen, die entsprechende Abfrage auf der PHP-Seite zu erstellen.

    
ESG 10.04.2012 14:27
quelle
1

Ich bin kein PHP-Entwickler (es ist PHP, richtig?), aber wäre es nicht einfach, Ihre Abfrage aus einer verketteten Zeichenfolge zu erstellen?

Pseudocode:

%Vor%     
fancyPants 10.04.2012 14:26
quelle
1

Sie können dies tun:

%Vor%

Wenn nur die erste Bedingung ausgeführt werden soll, übergeben Sie $q = 100 und $var = NULL . Daher wird die zweite Bedingung ignoriert. Und für die zweite Abfrage übergeben Sie die $q = 100 und $var = id value und Sie erhalten die zweite Abfrage.

    
Mahmoud Gamal 10.04.2012 14:26
quelle
1

Wenn sie sich nur in zusätzlichen where-Anweisungen unterscheiden, würde ich wahrscheinlich immer noch in PHP bleiben und folgendes tun:

%Vor%

/ Carsten

    
Carsten Gehling 10.04.2012 14:25
quelle
1

Ich würde dafür ein ternäres verwenden:

%Vor%     
Ryan P 10.04.2012 14:28
quelle
1

Ich bin ein Oracle-Typ, aber könnten Sie die Funktion IF() in Ihren Constraints verwenden, z. B .:

%Vor%

Das '%' ist ein Platzhalter, der zu allem passt und den 2. Ausdruck ignoriert.

    
Marc 10.04.2012 14:30
quelle
1

Also wenn du das

benutzt
  

Wenn oder der CASE

Warum verwenden Sie sie nicht in Ihrer SQL-Abfrage? Es wäre etwas wie

%Vor%

Aber in Ihrer SQL-Abfrage.

%Vor%

Ich denke, das wird dein Problem lösen. Aber als persönliche Beratung versuchen Sie eine Abfrage zu machen. Auch mit der Variable. Wir glauben nicht daran, die Standardabfrage in Abhängigkeit von den Bedingungen zu ändern.

Noch immer dein Wunsch und dein Wunsch

Prost !!

    
MDMalik 10.04.2012 14:31
quelle
1

Für dieses spezielle Problem, gehen Sie mit dem einfachen Zustand der Papierfledermaus Append Snippet.

Wenn Sie jedoch völlig unterschiedliche where-Anweisungen haben, sollten Sie die entsprechende where-Anweisung an die Abfrage anhängen, sobald Sie wissen, was Sie wollen. Zum Beispiel,

%Vor%

Es hängt alles von Ihren Bedürfnissen ab, aber weder diese noch die Lösungen von Paper-bat kopieren den Abfragecode.

    
covertCoder 10.04.2012 14:33
quelle

Tags und Links