Problem mit Datenbankabfrage
Alex
- datenbank
0 Götz0 Alex
0 Ilja0 Axel Richter
Hallo Leute,ich habe folgendes Problem:
Ich würde gerne für eine Seite meiner Mannschaft immer die zwei aktuellsten folgenden Termine für Spiele anzeigen lassen.
In der Tabelle habe ich einmal "Auswärts" für die Auswärtsmannschaft und "Heim" für das Heimteam.
Da ich ja jetzt sowohl nach dem Heim- als auch nach dem Auswärtsteam filtern will (Beide Male wäre es bspw. "Herren 2") und gleichzeitig nach dem Datum,d.h. es soll kein Termin dastehen,der schon vorbei ist,habe ich folgende Abfrage geschrieben:
$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";
wobei limit=2
ist.
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?
Vielen Dank im vorraus
Hallo Alex!
$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.
Also, probiers dochmal, indem Du für den Datumsvergleich ein konkretes Datum einsetzt, vielleicht klappt ja was mit dem Datumsvergleich zwischen gespeichertem Wert und NOW() nicht.
Ansonsten wäre es vielleicht noch sinnvoll, die Datensätze mit ORDER BY Datum ASC zu sortieren, damit auch sicher die beiden nächsten spiele angezeigt werden.
MfG
Götz
$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";
wie schon gesagt,haut nicht hin.mache ich hier einen fehler??
Also, probiers dochmal, indem Du für den Datumsvergleich ein konkretes Datum einsetzt, vielleicht klappt ja was mit dem Datumsvergleich zwischen gespeichertem Wert und NOW() nicht.
hab ich auch versucht,haut auch nicht hin,ich habe den eindruck er sucht sich die daten willkürlich raus
Ansonsten wäre es vielleicht noch sinnvoll, die Datensätze mit ORDER BY Datum ASC zu sortieren, damit auch sicher die beiden nächsten spiele angezeigt werden.
auch net geklappt.
hilfe
yo,
Aber irgendwie haut das nicht hin,es werden auch Termine angezeigt,die nicht mehr aktuell sind.
erst einmal fehlt ein ORDER BY nach datum sortiert, was dir aber schon gesagt wurde. das andere ist, was zeigt den die funktion NOW() für ein datum an. lass es dir doch mal ausgeben.
Ilja
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