Programmplaner
Hirte
- datenbank
0 Jan Feddersen0 Auge0 Hirte
Hallo zusammen,
stehe ein wenig auf dem Schlauch.
Ich möchte für ein selbstgeschriebenes CMS gerne einen "Programmplaner" basteln.
Die Termine können eintägig sein, aber auch über mehrere Tage gehen.
Und ich hätte gerne eine Ausgabe nach Monaten sortiert.
Bsp:
Januar
1. Surfen
15. Mehr surfen
Februar
3. Keine Lust mehr auf surfen
....
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?)
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?
Hoffe Ihr versteht im Ansatz was ich meine.
Bin für jeden Tipp dankbar.
Gruß
hirte
PS: Achja, programmiert ist das ganze in PHP
Den hintergrund für 2 Felder versteh ich nicht mach 2 DATE fields. Eins ist dein start datum das andere dein end datum. und wenn du nur 1 Tag willst ... machste start und end datum aufn selben tag .... ?!
SELECT * FROM t1 WHERE t1.date_start > $start AND t1.date_end < $end ORDER BY t1.date_start;
so würde ich das bauen
--------------
IT & PR - Fenebris.com
janfeddersen _at_ dunkelnetz _dot_ de
Kredite, Umschuldung, Finanzen
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
Hallo,
vielen Dank für Eure Antworten. Werde mich gleich mal dran machen. Bei weiteren Fragen werdet Ihr sicher von mir hören :-).
Gruß
Hirte