Axel Richter: Problem mit Datenbankabfrage

Beitrag lesen

Hallo,

$sql="SELECT DATE_FORMAT(Datum, '%d.%m.%Y') AS Changedatum, TIME_FORMAT(Uhrzeit, '%H.%i') AS Changezeit, Heim, Aus FROM $tabellenname WHERE Heim = 'Herren 2' OR Aus = 'Herren 2' AND Datum>=NOW() LIMIT $limit";

Aber irgendwie haut das nicht hin,es werden auch Termine angezeigt,die nicht mehr aktuell sind.

Was ist der Fehler und wie kann ich ihn beheben?

Da ist ein Operator-Rangfolgen-Fehler. Die Operation AND ist höherwertiger als die Operation OR und wird deshalb zuerst ausgeführt, genau wie Multiplikation von Addition ausgeführt wird.

SELECT DATE_FORMAT(Datum, '%d.%m.%Y') AS Changedatum, TIME_FORMAT(Uhrzeit, '%H.%i') AS Changezeit, Heim, Aus FROM Tabelle
WHERE Heim = 'Herren 2' OR Aus = 'Herren 2' AND Datum>=NOW();

beinhaltet alle Datensätze, bei denen Heim = 'Herren 2' ODER für die gilt: Aus = 'Herren 2' AND Datum>=NOW(), also auch die Datensätze, bei denen Heim = 'Herren 2' und das Datum egal ist.

Du musst hier Klammern setzen:

SELECT DATE_FORMAT(Datum, '%d.%m.%Y') AS Changedatum, TIME_FORMAT(Uhrzeit, '%H.%i') AS Changezeit, Heim, Aus FROM Tabelle
WHERE (Heim = 'Herren 2' OR Aus = 'Herren 2') AND Datum>=NOW();

viele Grüße ;-))

Axel