Sönke Tesch: MySQL Kalender - Zeilenausgabe

Beitrag lesen

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