Hiho,
ich muss zugeben das ich noch nie mit komplexeren Dateumoperationen in MySQL gearbeitet habe. Daher scheitert es bei mir schon daran überhaupt erst mal irgend ein Datum von PHP in MySQL zu bringen. Das einzige, das ichd a kenne ist FROM_UNIXTIME(). Aber es wäre ja ziemlich sinnlos mein in Tagen und Monaten vorliegendes Datum erst per PHP in einen timestamp umzuwandeln und dann wieder zurück. Gibt es da irgend einen direkteren Weg?
Das selbe gilt für den letzten tag des Monats. Auch hier fällt mir nichts ein um den effektiv zu berechnen. Da müsste ich ja auch erst mal das Datum in nen timestamp umwandeln, dann mit date() den letzten Tag rausfinden, mit den neuen Daten wieder nen timestamp errechnen und den dann wieder in mySQL umwandeln. Das kann es doch irgendwie nicht sein :)
Grüsse
Marc
echo $begrüßung;
Zu jedem Termin gibt es ein DATETIME Feld mit dem Startpunkt und ein DATETIME Feld mit dem Endzeitpunkt.
Auf Seite 1 bräuchte ich eine Monatsübersicht, also es sollen alle Monate angezeigt werden in denen mind. ein Termin liegt.
Auf Seite 2 möchte ich das selbe Spiel mit einer Tagesauswahl machen.
Kann mir irgendwer einen Schubs in die richtige Richtung geben, wie ich meine mySQL Abfrage am besten gestalte um möglichst Effektiv an die benötigten Infos zu kommen?Bei einem mehrere Tage dauernden Ereignis möchtest du sozusagen für jeden Tag ein Ergebnisdatensatz haben. Bei mehrfach vorkommenden Tagen hilft ein DISTINCT, die Dopplungen zu entfernen, das ist also kein Problem. Doch wie erzeugt man aus einem Datensatz mehrere definierte Ergebniszeilen?
Da ich dazu keine Lösung kenne würde ich die betroffenen Tage in der verwendeten Programmierumgebung ermitteln. Zunächst aber zum SQL-Teil:
WHERE
(start >= monatserster AND start <= ultimo) OR # StartDatum im betroffenen Monat
(ende <= ultimo AND ende >= monatserster) OR # EndeDatum innerhalb des Monats
(start < monatserster AND ende > ultimo) # Monat liegt zwischen Start und Endesollte alle Datensätze ermitteln, die den abzufragenden Monat betreffen. Nun sollen in den Ergebnisdatensätzen keine Tage außerhalb des Monats enthalten sein. Wenn das Startdatum vor dem Monatsersten liegt soll stattdessen der Monatserste angezeigt werden. Analog beim Monatsende.
SELECT
DAYOFMONTH( IF( start < monatserster, monatserster, start)) AS starttag,
DAYOFMONTH( IF( ende > ultimo, ultimo, ende)) AS endtagIn der Programmierumgebung muss nun noch für jeden Ergebnisdatensatz in einer von starttag bis endtag laufenden Schleife für jeden Tag "ein Kreuzchen im Kalender" gemacht werden.
Der Ultimo lässt sich soweit ich weiß nicht mit MySQL ermitteln, aber beispielsweise in PHP mit date('t', $ein_datum_aus_dem_Monat)
Dieses Prinzip sollte sich auch für ein Jahr anwenden lassen.
echo "$verabschiedung $name";