MySQL Kalender - Zeilenausgabe
helge
- php
Hallo liebe Helfergemeinde!
ich nutzen auf meinen Seiten seit einiger Zeit eine Terminliste, die regelmäßig aus EXEL importiere. Jeder Zeile entspricht ein Termin. Wobei Termine von verschiedenen Veranstaltern in der Liste aufgeführt sind. Somit kommt es auch zu Überschneidungen, d.h. mehrere Veranstalter - ein Termin bzw. ein Datum. Meine jetztige Ausgabe generiert pro Zeile in der MySQL Tabelle eine neue Tabellenspalte in der Ausgabe.
Mein Problem:
Wie kriege ich das hin, dass gleiche Termine immer in einer Ausgabenspalte angezeigt werden? Die Neue Zeile soll erst nach einem neuen Termin beginnen??
Hoffe es versteht jemand mein Problem. Bis jetzt sieht es so aus:
01.01.03 BW Herne
01.01.03 RW Dortmund
02.02.03 TH Essen
03.03.03 HU Ulm
03.03.03 IL Münschen
Es soll aber so aussehen:
01.01.03 BW Herne
RW Dortmund
02.02.03 TH Essen
03.03.03 HU Ulm
IL Münschen
Meine Aubfrage:
$abfrage = "SELECT * from $tab_termine ORDER by datum ASC";
echo <<<ABC
<table cellpadding=2 cellspacing=0 border=0 width="100%">
ABC;
$result = mysql_query($abfrage,$conn);
while ($row = mysql_fetch_array ($result))
{
echo <<<ABC
<tr><td>$termin</td></tr>
ABC;
?>
</tr>
<tr>
<td colspan=5 bgcolor=ffffff><img src=layout/leer.gif alt='' border=0 height=1 width=2></td>
</tr>
<?
}
}
mysql_close($conn);
?>
</table>
Somit kommt es auch zu Überschneidungen, d.h. mehrere Veranstalter - ein Termin bzw. ein Datum.
Wie kriege ich das hin, dass gleiche Termine immer in einer Ausgabenspalte angezeigt werden? Die Neue Zeile soll erst nach einem neuen Termin beginnen??
Einfache Variante: In dem Du Dir das Datum merkst und es nur ausgibst bzw. nur dann eine neue Zeile startest, wenn es sich ändert.
$datum=""; $did=false;
while ($termin=mysql_fetch_assoc(..))
{
if ($datum!=$termin["datum"]) // Datum hat sich geändert; neue Zeile
{
if ($did); echo "</td></tr>\n"; // schon eine Zeile offen; schließen
echo "<tr><td>".$datum."</td><td>";
$did=true;
};
echo htmlentities($termin["ort"])."<br />";
$datum=$termin["datum"];
}
echo "</tr>\n"; // letzte Zeile schließen
So in dem Dreh. Man könnte natürlich auch die Örtlichkeiten erstmal sammeln, dann bei Datumswechsel alles auf einmal ausgeben und die Datumszelle mit rowspan belegen:
$datum="";
while ($termin=mysql_fetch_assoc(..))
{
if (($datum!="") && ($datum!=$termin["datum"]))
{
echo "<tr><td rowspan=".sizeof($orte).">".$datum."</td><td>";
$did=false;
foreach ($orte as $ort)
{
if ($did) echo "<tr>";
echo "<td>".htmlentities($ort)."</td></tr>";
$did=true;
}; // foreach
$orte=Array();
}; // if
$datum=$termin["datum"];
$orte[]=$termin["ort"];
} // while
[hier noch letzten Datensatz ausgeben]
..in der Ausgabe noch etwas eleganter. Ganz extrem elegant wäre es natürlich, die Orte in ihrer Zelle in einer <ul>-Liste auszugeben. Aber das darfst Du Dir selbst zusammenbasteln :)
Gruß,
soenk.e