Auge: Programmplaner

Beitrag lesen

Hallo

Ich möchte für ein selbstgeschriebenes CMS gerne einen "Programmplaner" basteln.

Vom Ansatz her, würde ich jetzt in der Datenbank zwie Date Felder machen, wenn eintägig das zweite auf Null setzen (ist das möglich bei Date?)

Wenn du auch noch Uhrzeiten haben willst, solltest du DATETIME benutzen. Die Ausgabe kannst du dann gleich bei der DB-Abfrage regeln (MySQL:Datums- und Zeitfunktionen (DATE_FORMAT)). Wenn du ein solches Feld (das gilt auch für Felder des Typs DATE) nicht befüllst, ist dort der Wert "0000-00-00 00:00:00" gesetzt. Liest du für das Ende des Termins diesen Wert, kannst du davon ausgehen, dass der Termin eintägig ist.

Wie kann man denn die Abfrage gestalten das ich das ganze nach Monat(Jeder Monat, in dem ein termin ist, soll dann eine Überschrift bekommen) sortiere, bzw. zwischen der Ausgabe den Monat ausgebe?

Innerhalb einer Abfrage kannst du diese Unterscheidung nur indirekt machen. Du fügst deiner Abfrage ein weiteres Feld hinzu, in dem der Monat, evtl. inklusive dem Jahr vermerkt ist. Bei der Ausgabe der Ergebnisse prüfst du dann gegen dieses feld, um zu entscheiden, ob eine neue monatsüberschrift ausgegeben wird (Inhalt hat sich gegenüber dem letzten Schleifendurchlauf verändert) oder nicht (gleicher Inhalt wie beim letzten Schleifendurchlauf).

Abfrage (schematisch)

$sqlQuery = "[code lang=sql]SELECT  
DATE_FORMAT(datum_beginn,"%d.%m") AS startdatum,  
DATE_FORMAT(datum_beginn,"%m.%Y") AS monat,  
DATE_FORMAT(datum_ende,"%d.%m") AS enddatum,  
titel,  
beschreibung  
FROM  
tabellenname  
ORDER BY datum
~~~";[/code]  
  
Ausgabe der Ergebnisse  
~~~php
$abfrageergebnis = mysql_query($sqlQuery);  
  
if ($abfrageergebnis===false) {  
   // irgendwas ist schief gegangen, Fehlermeldung!  
} else {  
   // leere Überschrift erzeugen  
   $ueberschrift = "";  
   while ($row=mysql_fetch_assoc($abfrageergebnis)) {  
      // Überschrift setzen, falls sie sich verändert hat  
      if ($row["monat]!=$ueberschrift) {  
         $ueberschrift = $row["monat];  
         echo "<h2>".htmlspecialchars($ueberschrift)."</h2>";  
      }  
      // konkreten Termin ausgeben  
      echo "<h3>".htmlspecialchars($row["titel"])."</h3>";  
      echo "<p>".htmlspecialchars($row["beschreibung"])."</p>";  
      echo "<p>Beginn: ".htmlspecialchars($row["startdatum"]);  
      if ($row["enddatum"]!="00.00") {  
         echo "<br>Ende: ".htmlspecialchars($row["enddatum"]);  
      }  
      echo "</p>";  
   }  
}

PS: Achja, programmiert ist das ganze in PHP

Das spielt hier nur eine nachrangige Rolle, hier geht es primär um Datenbankabfragen.

Tschö, Auge

--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
Veranstaltungsdatenbank Vdb 0.3