Mailinglisten-Archive |
Hi Christian, sorry fuer die verspaetete Antwort. Die Antwort auf Deine Frage ist etwas umfangreicher, und leider fand ich gestern dafuer nicht mehr genug Zeit. Aber jetzt... :-) Zitat von Christian Vosen: > Lutz Zetzsche schrieb: > > > Solange das Datum gleichbleibt, laeufst Du fuer alle Kategorien von links > nach > > rechts durch und guckst, ob Du zu der jeweiligen Kategorie einen passenden > > Datumsdatensatz hast (horizontale Laufrichtung). Wenn ja, machst Du eine > > Markierung in die HTML-Tabellenzelle. :-) > > Wie mache ich das Durchlaufen von links nach rechts? Hast du da mal ein > Beispiel? Hab wohl immer noch ein Brett vor dem Kopf. Mache ich das mit > einer IF-Abfrage? > > > Usw. So in etwa koennte es aussehen, wenn ich Dich richtig verstanden habe. > > Vielleicht kannst Du noch etwas mehr Informationen geben. > > Hört sich auf jeden Fall so an, dass du mich richtig verstanden hast. > Trotzdem ein paar mehr Infos: > > Die Termin-Tabelle in der DB hat folgende Felder: id, Startdatum (Date), > Enddatum (Date), Beschreibung, KatID > Dazu die Kategorie-Tabelle: KatID, Beschreibung > > Wenn es z.B. 2 Kategorien (z.B. 2+4) an einem Termin gibt, dann soll das > ganze so aussehen: > > <tr> > <td>Startdatum</td> > <td> </td> > <td>Terminbeschreibung 1</td> > <td </td> > <td>Terminbeschreibung 2</td> > </tr> > > wobei die Kategoriebeschreibungen schon in den jeweiligen Spalten der > Kopfzeile stehen. ausnahmsweise zitiere ich Dich mal voll, weil meine Antwort sich teilweise auf mehrere Stellen bezieht. Zunaechst einmal scheint es mir fast, dass Du einen kleinen Design-Fehler in der Datenbank hast. Wenn ich das richtig sehe, muss Du einen Termin mehreren Kategorien zuordnen koennen und eine Kategorie mehreren Terminen. D.h. es waere ideal, um keine Daten mehrfach ablegen zu muessen, wenn Du fuer diese m:n-Beziehungen eine Verknuepfungstabelle einfuehren wuerdest. Du haettest dann folgende Tabellen: - termine: terminID, startDatum, endDatum, beschreibung - kategorien: kategorieID, beschreibung - verknuepfungen: VerknuepfungID, terminID, kategorieID Davon gehe ich jetzt mal als Grundlage aus. Um nun Deine Zeilen aufzubauen, benoetigst Du die Termine. Um die Spalten aufzubauen, benoetigst Du zusaetzlich die Kategorien. Jedenfalls wenn ich richtig verstanden habe, was Du moechtest. Anschliessend laeufst Du dann die Termine durch und innerhalb der Termine die Kategorien. Das Ganze koennte folgendermassen aussehen (UNGETESTET!): 1. Termine holen: select distinct termine.*, kategorieID from termine, kategorien, verknuepfungen where termine.terminID=verknuepfungen.termineID and verknuepfungen.kategorieID=kategorien.kategorieID order by termine.startDatum desc, termine.endDatum desc, termine.terminID asc, kategorien.kategorieID asc 2. Kategorien holen: select distinct * from kategorien order by kategorien.kategorieID asc 3. Termine und Kategorien ausgeben: Wichtig ist hier fuer die folgenden Schleifendurchlaeufe, dass unter 1. erst nach terminID und dann nach kategorieID sortiert wird und unter 2. analog nach kategorieID, wobei bei kategorieID unter 1. und 2. die gleiche Reihenfolge (asc oder desc) angegeben sein muss. Sonst geht in den Schleifendurchlaeufen die Zuordnung zwischen Terminen und Kategorien verloren. Das Ergebnis aus 1. sieht ja z.B. so aus: 1 | 2004-01-01 - 2004-01-31 | Beschreibung... | Kategorie 1 1 | 2004-01-01 - 2004-01-31 | Beschreibung... | Kategorie 2 1 | 2004-01-01 - 2004-01-31 | Beschreibung... | Kategorie 4 2 | 2004-02-29 - 2004-03-01 | Beschreibung... | Kategorie 2 2 | 2004-02-29 - 2004-03-01 | Beschreibung... | Kategorie 3 Und das Ergebnis aus 2. z.B. so: 1 | Beschreibung... 2 | Beschreibung... 3 | Beschreibung... 4 | Beschreibung... Nun machst Du folgendes: Du durchlaeufst ganz normal das Ergebnis aus 1. Das sind im Beispiel hier ja fuenf Zeilen. Nach Deiner HTML-Tabellenlogik bilden die ersten drei Termine die Zeile 1 der HTML-Ausgabetabelle und die letzten beiden Termine die Zeile 2. Wann Du eine neue Terminzeile in der HTML-Ausgabetabelle anfaengst, kannst Du ueber die terminID steuern. Wenn die terminID gegenueber der vorigen wechselt, dann beginnt ein neuer Termin und damit eine neue Terminzeile in der HTML-Ausgabetabelle. Wenn Du eine neue Ausgabezeile beginnst, dann baust Du nach der Terminspalte die folgenden Kategoriespalten ueber die gezogenen Kategorien aus 2. auf. Die durchlaeust Du von vorne nach hinten. Parallel durchlaeufst Du die Termine und pruefst, ob der Termin der aktuellen Kategorie zugeordnet ist. Wenn es zu der Kategorie eine Terminzuordnung gibt, dann fuellst Du die Kategoriezelle in der HTML-Tabellenzeile entsprechend. Sonst bleibt sie leer. Kommst Du damit weiter? Sonst muesste ich mal den Code zusammenbasteln. Das wuerde aber etwas dauern. :-) Viele Gruesse Lutz
php::bar PHP Wiki - Listenarchive