Zur Navigation

Nur Ereignisse der kommenden Woche aus der Datenbank holen

1 tobi

nun passt die html mail soweit.

ich möchte jetzt dass, was von der datenbank eingelesen wird, noch ein wenig filtern.

und zwar möchte ich wenn die mail versendet wird, dass nur ein bruchteil des datenbank inhaltes mit versendet wird.

in der db sind spiele und spieltermine aufgelistet. und nun möchte ich, dass nur spiele in der mail auftauchen, die auch in der kommenden woche stattfinden werden.

wie wird dass nun realisiert?

aktuelle zeit prüfen und dann + 7 tage?

30.12.2009 16:06

2 Jörg Kruse

Ja, so kannst du das probieren.

Wobei dies kein Problem der Email-Erstellung mehr darstellt. Die Datenbankinhalte kannst du aus der Datenbank holen und filtern, unabhängig davon, ob du sie anschließend in eine Webseite, in eine Email, in eine XML-Datei oder irgendein anderes Ausgabeformat einfügst.

30.12.2009 17:56

3 tobi

läßt sich dies so realisieren?

//sql Befehl			
$sql = "
SELECT id, wochentag, spielzeit, spielklasse, heimmannschaft, gastmannschaft, heimergebnis, gastergebnis FROM spielergebnisse ORDER BY spielzeit <= add_date(now(),interval +7 day)";

30.12.2009 19:30

4 Jörg Kruse

In MySQL gibt es keine Funktion ADD_DATE() - nur ADDDATE() und das synonyme DATE_ADD()

Die Vorgehensweise hängt auch davon ab, welcher Datentyp der Spalte `spielfeld` zugeordnet ist; ansonsten einfach ausprobieren ;)

30.12.2009 21:16

5 tobi

in der tat, add_date gibt es nicht, dass habe ich beim googlen wohl irgendwie falsch aufgeschnappt.

ich habe nun ein wenig mit DATE_ADD und ADDDATE rumexperimentiert. leider komme ich zu keinem ergebnis.

die spielzeit, in welcher datum und die uhrzeit in der db als datetime gespeichert ist, sieht in der db folgendemaßen aus:
2010-01-12
19:30:00

31.12.2009 00:28

6 Jörg Kruse

Was heißt "kein Ergebnis"? liefert die Abfrage null Datensätze oder einen Fehler zurück (den du dir in PHP mit mysql_error() ausgeben lassen kannst)?

In der ORDER BY Klausel macht der Vergleich denke ich wenig Sinn - dieser gehört eher in eine WHERE Klausel - also ungefähr so in der Art:

WHERE spielzeit <= ADDDATE(NOW(), INTERVAL 7 DAY)
ORDER BY spielzeit

31.12.2009 12:38 | geändert: 31.12.2009 12:39

7 tobi

bei meinen versuchen wurden alle ergebnisse aus db angezeigt, nur ein wenig durcheinander.

jetzt habe ich dein bespiel mal eingebaut.
hier werden nur die ergebnisse aus dem jahr 2009 ausgeliefert. diese sind ja aber überflüssig, von 2010 taucht kein ergebnis auf denn ich brauche ja zeitpunkt jetzt + 7 tage

EDIT: liegt wohl daran dass innerhalb der nächste 7 tage kein ereignis stattfindet. habe intervall nun auf 14 tage gemacht, da werdemn 2 daten aus dem jahre 2010 augeliefert.
aber 2009 wird immer noch aufgelistet

31.12.2009 13:09 | geändert: 31.12.2009 13:13

8 Jörg Kruse

Du hast mit dem Operator "<=" die Ergebnisse auch nur nach oben hin begrenzt. Um ältere Ergebnisse (als heute) auszuschließen, bräuchtest du noch eine zweite Bedingung mit ">" oder besser noch eine Bedingung mit dem Operator BETWEEN

WHERE spielzeit BETWEEN CURDATE() AND (CURDATE() + INTERVAL 7 DAY)

31.12.2009 13:38 | geändert: 31.12.2009 13:39

9 tobi

was es nicht alles gibt.

kann ich dass ganze auch noch eingrenzen dass nur unsere heimspiele aufgezeigt werden?
also bei heimmannschaft darf nur mein verein auftauchen?
in der db sind die einzelnen heimmannschaften meines teams mit
ttc xyz 1
ttc xyz 2
ttc xyz 3
ttc xyz 4
ttc xyz 5
ttc xyz 6

ist dafür join nötig?

ein weiteres, was aber wahrscheins in den anderen thread zur mail darstellung gehört, taucht auch noch auf, aber das poste ich im anderen thread.

31.12.2009 14:08

10 Jörg Kruse

Mit dem Schema "ttc xyz 1" etc. kann ich jetzt nichts anfangen, aber die Abfrage in Beitrag 3 beinhaltet eine Spalte heimmannschaft in der Tabelle spielergebnisse - diese sollte doch zum Filtern ausreichen?

31.12.2009 14:31