SQL Nur Felder anzeigen die nicht leer (NULL) sind

s0nny

Ensign
Registriert
März 2012
Beiträge
187
Hallo,
habe ein Problem bei einem kleinen PHP Projekt.
Kurz vereinfacht erklärt:
Ich habe eine Datenbank mit Ergebnissen von Fußballspielen. Darin stehen Heimmannschaft, Auswärtsmannschaft, Anstoßzeit, Tore Heimmannschaft, Tore Auswärtsmannschaft (und noch etwas mehr was jetzt erstmal nicht von Belangen sein dürfte).
Wenn ich ein Spiel anlege (via PHP), dann schreibe ich quasi die Heimmannschaft, Auswärtsmannschaft und die Anstoßzeit rein, und belasse die beiden Felder für die Tore wie sie sind, also NULL.

Nun will ich daraus eine Tabelle generieren.
Hier mein Code:
PHP:
$teams_query = "SELECT teams.teamname, teams.teamid FROM teams WHERE leagueid = '" . $leagueid . "'";
$teams_result = mysqli_query($conn, $teams_query);
while ($teams = mysqli_fetch_array($teams_result)) {

    //für jedes Team Punkte usw speichern
    //ZählVariablen
    $points = 0;
    $goals = 0;
    $goals_against = 0;
    $matches = 0;

    //Schritt 1, nur Punkte für Heimspiele  
    $results_query = "SELECT * FROM matches WHERE hometeamid = '" . $teams["teamid"] . "' AND starttime <= '" . time() . "' AND home_result != NULL AND away_result != NULL";
    $results_result = mysqli_query($conn, $results_query);
    while ($results = mysqli_fetch_array($results_result)) {
        $matches++;
        
        //Punkte
        if ($results["home_result"] == $results["away_result"]) {
            //unentschieden
            $points++;
        } else if ($results["home_result"] > $results["away_result"]) {
            //gewonnen
            $points+=3;
        }

        //Tore
        $goals = $goals + $results["home_result"];
        $goals_against = $goals_against + $results["away_result"];
    }
    //Schritt 2, nur Punkte für Auswärtsspiele  
    $results_query = "SELECT * FROM matches WHERE awayteamid = '" . $teams["teamid"] . "' AND starttime <= '" . time() . "' AND home_result != NULL AND away_result != NULL";
    $results_result = mysqli_query($conn, $results_query);
    while ($results = mysqli_fetch_array($results_result)) {
        $matches++;
        
        //Punkte
        if ($results["away_result"] == $results["home_result"]) {
            //unentschieden
            $points++;
        } else if ($results["away_result"] > $results["home_result"]) {
            //gewonnen
            $points+=3;
        }
        
        //Tore
        $goals = $goals + $results["away_result"];
        $goals_against = $goals_against + $results["home_result"];
    }

    //Schritt 3, In DB eintragen
    $insert_query = "INSERT INTO ranking (teamid, leagueid, points, goals, goalsagainst) VALUES ('" . $teams["teamid"] . "','" . $leagueid . "','" . $points . "', '" . $goals . "','" . $goals_against . "')";
    if (!mysqli_query($conn, $insert_query)) {
        echo "<br>Fehler beim Eintragen der Ergebnisse für Team " . $teams["teamname"];
        echo mysqli_error($conn);
    } else {
        echo "<br>" . $teams["teamname"] . " wurde erfolgreich eingetragen.";
    }
}

Eigentlich kommt es mir primär auf diese Zeile an:
PHP:
$results_query = "SELECT * FROM matches WHERE hometeamid = '" . $teams["teamid"] . "' AND starttime <= '" . time() . "' AND home_result != NULL AND away_result != NULL";

Das Problem ist, dass er damit einfach die Einträge ignoriert, in denen tatsächlich die Ziffer 0 drin steht.
Habe außerdem auch schon folgende Schreibweisen getestet aber keine hat funktioniert:
PHP:
$results_query = "SELECT * FROM matches WHERE hometeamid = '" . $teams["teamid"] . "' AND starttime <= '" . time() . "' AND home_result != 'NULL' AND away_result != 'NULL'";
PHP:
$results_query = "SELECT * FROM matches WHERE hometeamid = '" . $teams["teamid"] . "' AND starttime <= '" . time() . "' AND home_result != '' AND away_result != ''";

Wie kann ich mir wirklich nur die Einträge anzeigen lassen, in denen in den Feldern home_result und away_result nicht NULL steht?

Danke im vorraus!
Ergänzung ()

Kann denk ich schon geschlossen werden. Hab gerade den entscheidenden Tip bekommen, statt != einfach is not zu nutzen und scheint zu funktionieren :-)
 
Das hast du richtig erkannt, NULL benötigt immer eine Sonderbehandlung mit IS NOT NULL bzw. IS NULL ....
 
Zurück
Oben