next up previous contents


3.12 Datentabellen verknüpfen

Warum gibt es in der Tabelle 'seiten' das Feld 'AkteID'? Ganz einfach, weil wir die beiden Tabellen miteinander verknüpfen wollen. Ohne, dass wir das beim Anlegen der Datenstrukturen an die grosse Glocke gehängt haben, soll in unserer Datenhaltung gelten: Eine Akte enthält mehrere Seiten und die Tabelle 'seiten' nimmt die einzelnen Seiten letztlich auf. Wir wollen nun nachschauen, wieviele Seiten wir in der ersten Akte haben:

mysql> select akten.ID,akten.Titel,seiten.Text from akten,
    -> seiten where akten.ID=seiten.AkteID;
+----+------------------+--------------------------------+
| ID | Titel            | Text                           |
+----+------------------+--------------------------------+
|  1 | Meine erste Akte | Ferien, Felsberg, Schweiz      |
|  1 | Meine erste Akte | Wir erfassen eine zweite Seite |
+----+------------------+--------------------------------+
2 rows in set (0.00 sec)

Damit die Abfrage gelingt, sagen wir MySQL einfach 'where akten.ID=seiten.AkteID'. So einfach geht das. Falls wir nur an der Anzahl interessiert sind, könnten wir auch nur die Anzahl (und nicht die Feldwerte) abrufen:

mysql> select count(akten.ID) from akten,seiten 
    -> where akten.ID=seiten.AkteID;
+-----------------+
| count(akten.ID) |
+-----------------+
|               2 |
+-----------------+
1 row in set (0.00 sec)

Aus kosmetischen Gründen würde ich die nachfolgende Variante empfehlen:

mysql> select count(akten.ID) as AnzAkten from akten,
    -> seiten where akten.ID=seiten.AkteID;
+----------+
| AnzAkten |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

Mit dem Zusatz 'as AnzAkten' erreichen wir, dass eine 'unleserliche' Spaltenüberschrift lesbarer wird.



Dokument als PDF anzeigen -- © 2003-06-15 by Urs Pfister, CH-8057 Zürich