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