Mailinglisten-Archive |
> Den einzelnen Datensaetzen moechte ich wiederum eine Liste > zufuegen. > > Beispiel: > > Datensatz 1 > Unterdatensatz 1.1 > Unterdatensatz 1.2 > Unterdatensatz 1.3 > Datensatz 2 > Unterdatensatz 2.1 > Unterdatensatz 2.2 > Unterdatensatz 2.3 > Datensatz 3 > ... Dies ist eine klassische 1:N Relation zwischen zwei Tabellen, bei der eine Gruppierung der N-Seite der Relation nach den Titeln der 1-Seite der Relation erfolgen soll. Dies kann man mit einer einzigen Query erledigen, wobei bei der Ausgabe überzählige "Titel" der 1-Seite weggelassen werden können. Zur Query: Sei t1 die Tabelle der Datensätze, mit dem PRIMARY KEY t1.id1. Sei t2 die Tabelle der Unterdatensätze, mit dem PRIMARY KEY t2.id2. Sei t2.t1_id1 FOREIGN KEY in t1, d.h. an jedem Unterdatensatz t2.id2 klebe die Nummer des ihm zugeordneten Datensatzes aus t1. Dann kannst Du mit SELECT t1.id1 as t1_id1 , t1.text as t1_text , t2.id2 as t2_id2 , t2.t1_id1 as t2_t1_id1 , t2.text as t2_text FROM t1, t2 WHERE t1.id1 = t2.t1_id1 AND $additional_constraint ORDER BY t1.id1, t2.id2 die von Dir gewünschte Information in der von Dir gewünschten Ordnung bekommen. Die Query ist nur dann schnell, wenn t2.t1_id1 ein INDEX ist. Zur Darstellung: Die von Dir gewünschte Darstellung kannst Du nur bekommen, wenn Du manuell formatierst. Dies kann wie folgt geschehen (Query mit DB_Sql von PHPLIB notiert): $db = new DB_Example; $query = "<wie oben>"; $db->query($query); $oldid1 = ""; while($db->next_record()) { $id1 = $db->f("t1_id1"); $text1 = $db->f("t1_text"); $id2 = $db->f("t2_id2"); $t1ref = $db->f("t2_t1_id1"); $text2 = $db->f("t2_text"); if ($oldid1 != $id1) { print_master_line($id1, $text1); $oldid1 = $id1; } print_detail_line($id2, $t1ref, $text2); } Die Funktion print_master_line druckt dabei eine Überschrift, die Funktion print_detail_line druckt dabei jeweils eine Detailzeile. Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.netuse.de/ (We have moved! Update your bookmarks!)
php::bar PHP Wiki - Listenarchive