verschachtelte Schleifen
am 07.01.2006 21:15:04 von Michael GrambowskiHallo NG,
nicht leicht zu erklären, das Problem. Ich versuche es mal.
Die Kurzform:
Ich habe eine große while-Schleife um eine HTML Tabellenkonstruktion,
die so oft läuft, wie Einträge in der Haupt-DB-Table existieren. Diese
Haupt-DB-Table liefert die Überschrift, die über jeder erzeugten
HTML-Tabelle stehen soll. (Sehen eigentlich aus wie Boxen)
So eine HTML-Tabelle besteht aus 4 Zellen. In jeder Zelle werden
Abfrageergebnisse aus weiteren DB-Tables dargestellt, die per
Fremdschlüssel an die Haupt-DB-Table ('hosting') verknüpft sind.
Ich habe also insgesamt 5 DB-Tables und 5 Abfragen wovon 4 in jeweils
einer Tabellen-Zelle abgearbeitet werden. Die 5. ist die aussen rum
liegende Abfrage, die die Überschrift zu den Detailinformationen liefert.
Das Problem entsteht durch die Durchläufe der äußeren Schleife. Mit
jedem Durchlauf wird auch ein Eintrag in den Unterabfragen hinzugefügt.
Dabei reicht hier natürlich ein Durchlauf um die nötige Information zu
zeigen.
Wie schaffe ich es, dass die äußere Schleife die Anzahl der
darzustellenden HTML-Tabellen erzeugt, dabei jedoch in den Unterabfragen
nicht sooft durchläuft?
Ich hoffe das man mich versteht. Wie gesagt, es ist kompliziert zu
beschreiben.
Die äußere Schleife geht so:
$sql_hosting = "SELECT * FROM hosting";
$result_hosting = mysql_query($sql_hosting);
while($data = mysql_fetch_assoc($result_hosting)) {
Hier beginnt nun der Bau der HTML Tabelle.
Der obere Teil soll die Überschrift tragen (einen Domainnamen)
In der folgenden Tabellzelle wird die erste Unterabfrage durchlaufen.
Dabei wird in einer DB-Tabelle 'db' nach Zugangsdaten für die zur Domain
gehörenden Datenbanken abgefragt und mit der Haupt-DB-Tabelle verknüpft.
$sql_db = "SELECT * FROM db, hosting WHERE hosting.Nr = db.DBNr_FS";
$result_db = mysql_query($sql_db);
while ($dbdata = mysql_fetch_assoc($result_db)) {
echo "\t
echo "\t\t
echo "\t\t
echo "\t\t
echo "\t
}
Die gleiche Abfrage wird ähnlich noch 3 mal für ftp Daten, Maildaten und
Maillisten durchlaufen, wobei stets andere Variablennamen verwendet werden.
Nachdem die Tabelle beendet wird, wird auch die äußere Schleife wieder
durch ein } geschlossen.
In der Ausgabe finde ich, wenn in der Haupt-DB-Table zwei Einträge sind,
zwei Tabellen untereinander, wobei jede die richtige Überschrift trägt.
Leider sind die Unterabfragen jeweils auch mit Angaben anderer
Zugehörigkeit ausgefüllt. Beispiel: Ich habe in der 'db' ein Tupel mit
Fremdschlüssel auf den 1. Eintrag der Haupt-DB-Table und einen zweiten
Tupel mit Referenz auf den 2. Eintrag der Haupt-DB-Table. Trotz exakter
Referenzierung werden alle Einträge der 'db' in allen UnterTabellen
(also die in den Zellen) aufgeführt, was einfach nicht sein kann. Ich
werde weich. Ich gebe auch auf.
Mir ist schon klar, dass die Lösung vermutlich banal ist, nur nutzt mir
das nichts, denn ganz offenbar komme ich nicht dahinter.
Für Vorschläge bedanke ich mich herzlich.
Gruss
Michael Grambowski