2016-07-25 21 views
1

Ich habe eine SQL-Abfrage. Ich benutze eine PHP-Funktion, um es auszuführen und es gibt zwei PHP-Variablen drin. Manchmal ist eine der PHP-Variablen Null, was zu keinen Ergebnissen führt. Es gibt eine Möglichkeit, es anzupassen, so dass, wenn diese Variable Null ist, es alle Datensätze basierend auf der anderen Bedingung zurückgibt?Geben Sie in SQL auf Null zurück. Wählen Sie

SELECT 
      `author`.name, 
      `author`.id, 
      `category`.name as cat_name 
     FROM 
      `post` 
      INNER JOIN `author` ON (`author`.id = `post`.author) 
      INNER JOIN `category` ON (`category`.id = `post`.category_id) 
     WHERE `author`.site_id='".$site_id."' AND `post`.category_id='".$category_id."' 
      AND `category`.id <> 0 
     GROUP BY `post`.author 

Was ich will, ist alle Datensätze zurück, wo author.site_id zu site_id $ gleich ist, wenn $ category_id gleich Null ist.

+1

Erstellen Sie einfach die Bedingung in Ihrem PHP-Code, indem Sie 'AND post.category_id = '". $ Category_id. "'' Nur wenn '$ category_id' nicht 0 ist. – roberto06

+1

Ersetzen Sie 'AND post.category_id ='". $ category_id. "'' mit '($ category_id! = 0?" UND post.category_id =' ". $ category_id." ': "") ' – apokryfos

+0

Die SQL-Anweisung ist eine Variable $ sql =" STATEMENT " Ändern Sie den Code, den ich Apokryfos ersetzen muss? –

Antwort

1

Sie können etwas tun:

WHERE (`author`.site_id = '".$site_id."' OR $site_id = 0) AND 
     (`post`.category_id = '".$category_id."' OR $category_id = 0) AND 
     `category`.id <> 0 

Typischerweise wird NULL für einen fehlenden Wert verwendet, anstatt 0. Die gleiche Idee funktioniert mit NULL. . . Sie müssen nur IS NULL anstelle von = 0 verwenden.

+0

Ich habe es ausprobiert, es hat funktioniert, bis ich es auf der Seite versucht, wo $ category_id nicht festgelegt wurde.Wenn ich die SQL aussprechen, legte es den Wert von $ category_id in der zweiten Linie, wo wir überprüfen, ob es 0 ist. So können Sie es bekommen endet mit "OR 382 = 0" oder "OR 0 = 0" und natürlich das Problem, das ich bekomme, ist damit endet in "OR = 0". Gibt es einen Weg um das? –

+0

Sie können die NULL Coale verwenden scing operator ('??'), um es durch '0' zu ersetzen. –

+0

Ich habe einfache Anführungszeichen um $ category_id gesetzt. Das scheint zu funktionieren. Könnte dies zu Problemen führen? –