• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

[MYSQL] SQL Abfrage für mehrtägige Events in Kalender

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Hallo ATler,
ich komme grad nicht weiter.

Ich habe hier eine Coldfusion Klasse, die mir alle Kalendereinträge aus meinem Google Calendar holt und als Query Result speichert.
Ich kann mit dem Ergebnis also umgehen, als käme es aus einer Datenbank.

Nun gibt es in Coldfusion (vielleicht auch in PHP) die Möglichkeit einen bestehenden Query als Datenquelle zu nutzen.
Also etwa so: SELECT * FROM $vorheriges_Ergebnis WHERE id=123

Mein erstes Query Result "events" enthält alle Termine. Nun möchte ich in meinem Kalender für jeden Tag, falls vorhanden, den entsprechenden Termin ausgeben.

events enthält zwei Felder starttime und endtime mit Datumsangaben im Format: {ts '2012-05-27 10:00:00'}
Bisher loope ich von 1 bis x, wobei x die Anzahl der Tage im jeweiligen Monat darstellt und frage in jedem Durchlauf mit dem aktuellen Datum ab, ob es einen Event gibt.

Um nun den Event vom 27.5.2012 zu bekommen nutze ich:
SELECT * FROM events WHERE starttime BETWEEN {ts '2012-05-27 00:00:00'} AND {ts '2012-05-27 23:59:59'}
Ich muss 0-23:59 nehmen, da ja starttime und endtime auch eine Zeitangabe enthalten.

Für einen eintägigen Termin funktioniert das auch. Allerdings scheiter ich an mehrtägigen Terminen.
Beispiel Event X
starttime {ts '2012-04-28 10:00:00'}
endtime {ts '2012-05-01 19:00:00'}

Also dachte ich mir, erweitere ich mein SQL:
SELECT * FROM events WHERE starttime BETWEEN {ts '2012-05-27 00:00:00'} AND {ts '2012-05-27 23:59:59'}
OR endtime BETWEEN {ts '2012-05-27 00:00:00'} AND {ts '2012-05-27 23:59:59'}

{ts '2012-05-27 00:00:00'} und {ts '2012-05-27 23:59:59'} sind natürlich variabel und werden in jedem Durchlauf um einen Tag hochgezählt.

Damit wird mir oben genannter Event am 28.4. und am 1.5. angezeigt. Ich würde ihn aber natürlich auch gerne am 29.4. und 30.4 anzeigen.

Irgendwie sehe ich den Wald vor lauter Bäumen nicht. Bei Google habe ich bisher auch nichts brauchbares gefunden.

Jemand eine Idee?
 

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Habs mittlerweile raus:
SELECT * FROM events WHERE
starttime BETWEEN #createdatetime(year(start),month(start),i,0,0,0)# AND #createdatetime(year(start),month(start),i,23,59,59)#
OR endtime BETWEEN #createdatetime(year(start),month(start),i,0,0,0)# AND #createdatetime(year(start),month(start),i,23,59,59)#
OR (starttime <= #createdatetime(year(start),month(start),i,0,0,0)# AND endtime >= #createdatetime(year(start),month(start),i,0,0,0)#)

Wobei i der Zähler ist.
 
  • Like
Reaktionen: _lio_