PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abfrage


klaus-maus
11.08.2005, 20:19:02
Hallo,
ich habe ein kleines Problem mit einer Abfrage und bin schon einige Stunden vergeblich am probieren:
Aus einer Tabelle mit Ansetzungen für Fussballspiele sollen die nächsten Spiele ermittelt werden. Erreicht werden soll folgendes:
Momentan werden sämtliche Spiele des aktuellen Spieltages angezeigt, wenn spiel_date >= NOW() ist.

Das mache ich mit folgender Abfrage und werte das Ergebnis weiter aus:
SQL="SELECT spiel_date FROM ansetzungen WHERE spiel_date >=NOW() ORDER BY sp_date ASC LIMIT 1";

Unschön daran ist, dass auch die Spiele weiter angezeigt werden, die bereits beendet sind; erst 00:00 Uhr werden die Ansetzungen des nächsten Spieltages angezeigt.

Wie bekomme ich jetzt eine Abfrage in der Form hin:
SQL="SELECT spiel_date,spiel_zeit,CURTIME() FROM ansetzungen WHERE spiel_date >=NOW() AND spiel_zeit >= CURTIME() ORDER BY spiel_zeit ASC LIMIT 1";

ich glaube, das Problem ist das datum, das dürfte wohl nur 1x auftauchen. Wie bekomme ich das hin? Das Ergebnis dieser Abfrage wird in eine Variable geschrieben und weiter ausgewertet.

Habe da im Moment wohl einen Quirl im Kopf.
Gruß Klaus

xabbuh
11.08.2005, 21:02:54
Wie sieht denn überhaupt deine Tabellenstruktur aus?

heddesheimer
12.08.2005, 07:48:55
Ich vermute mal, SPIEL_DATE ist vom Typ DATE.

Ersetze das einfach mit dem Datentyp DATETIME, dann verschwidet das Problem von selbst. In das Feld SPIEL_DATE musst du dann natürlich auch die Zeit mit eingeben, wenn der Datensatz gespeichert wird.

Gruß Marian

klaus-maus
12.08.2005, 11:19:55
Hallo,
so sieht die Tabelle ansetzungen = $table8 aus:

sp_ID int(3) Nein auto_increment
sp_date date Nein 0000-00-00
sp_zeit time Nein 00:00:00
team_ID char(2) Nein
sp_ort1_ID varchar(10) ...
sp_ort2_ID varchar(10)
sp_erg_1 int(2)
sp_erg_2 int(2)
sp_pokal int(1)

( die char bzw. varchar-Felder sollten wahrscheinlich auf int() umgestellt werden)

Ich habe das Problem jetzt mittels mehrerer unterschiedlicher Abfragen gelöst.

$datum_SQL="SELECT sp_date FROM $table8 WHERE sp_date>=NOW() ORDER BY sp_date ASC LIMIT 1";
$datum_result=mysql_query($datum_SQL);
while($tmp_datum=mysql_fetch_array($datum_result)){
$tmp_1=$tmp_datum['sp_date'];
}

$zeit_SQL="SELECT sp_ID,sp_date,sp_zeit FROM $table8 WHERE sp_date >=NOW() ORDER BY sp_zeit ASC LIMIT 1";
$zeit_result=mysql_query($zeit_SQL);
while($tmp_zeit=mysql_fetch_array($zeit_result)){
$tmp_2=$tmp_zeit['sp_zeit'];
}

$tmp_SQL="SELECT sp_date,sp_zeit,CURTIME() FROM $table8 WHERE sp_date=NOW() AND sp_zeit>=CURTIME()";
$tmp_result=mysql_query($tmp_SQL);
$tmp_zahl = @mysql_num_rows($tmp_result);

$tmp_5_SQL="SELECT sp_date FROM $table8 WHERE sp_date>NOW() ORDER BY sp_date ASC LIMIT 1";
$tmp_5_result=mysql_query($tmp_5_SQL);
while($tmp_x=mysql_fetch_array($tmp_5_result)){
$tmp_5=$tmp_x['sp_date'];
}

if ($tmp_1 == date("Y-m-d") && date("H:i:s") >= '$tmp_2') {
$abfrage = 't3.sp_date=NOW() AND t3.sp_zeit>=CURTIME()';
}

if ($tmp_1 == date("Y-m-d") && $tmp_zahl < '1') {
$abfrage = "t3.sp_date>NOW() AND t3.sp_date='$tmp_5'";
}

if ($tmp_1 > date("Y-m-d")) {
$abfrage = "t3.sp_date>=NOW() AND t3.sp_date='$tmp_1'";
}

$abfrage wird als Teil der WHERE - Klausel im "Haupt-SQL-Statement" eingebunden. Sicher nicht sehr elegant, aber es funktioniert.
War sehr heftig, habe mich sehr oft verirrt ;-).

Gruss Klaus.