Author: Progman, zuletzt bearbeitet von progman @ 2004/09/01 13:49:16
Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.
Verknüpfen von MySQL-Tabellen
1. Warum Verknüpfen
Nehmen wir an dass wir ein Newsscript mit Kommentarfunktion schreiben wollen. Dann stellt sich das Problem wie wir diese Kommentare speichern sollen. Die schlechteste Idee ist es in der News-Tabelle eine neue Spalte hinzuzufügen. In der würde man dann die Kommentare der News einfügen. Da eine Spalte aber nur ein String, Datum oder Zahl speichern kann, wird man probleme haben die Kommentare elegant zu speichern. Man würde dann ein Trennzeichen erfinden und die Kommentare dann wie folgt speichern.
Progman|Progman@foobar.de|Echt interessant Erasor|bla@bli.com|Ich finde dies scheisse ...
In PHP würde man dann jede Zeile mit explode verarbeiten und die Arrayelemente ausgeben. Dies hat z.B. der Nachteil dass man als Name nicht das Zeichen | benutzen kann, denn sonst würden alle folgenden Fehler falsche Informationen haben.
Man müsste eine innere Tabelle in eine Spalte speichern, so wie ein verschachteltes Array. Doch sowas wie eine innere Tabell kann man nicht in eine Spalte hinzufügen. Aber man kann einfach eine neue Tabelle erstellen.
2. IDs von anderen Tabellen speichern
Wir erstellen erstmal 2 getrennte Tabellen, News und News_Kommentare.
CREATE TABLE News ( ID INT AUTO_INCREMENT PRIMARY KEY, Titel VARCHAR(70), Inhalt TEXT, Author VARCHAR(40), Datum DATETIME ); CREATE TABLE News_Kommentare ( ID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(30), Email VARCHAR(70), Inhalt TEXT, Datum DATETIME );
Dies würde dann so aussehen.
Abb.: 2 MySQL-Tabelllen
Den Trick den man jetzt macht, ist der, dass man in der Tabelle News_Kommentare eine weitere Spalte hinzufügt. In dieser Spalte speichert man die ID der News, zu der dieser Kommentar gehört.
CREATE TABLE News ( ID INT AUTO_INCREMENT PRIMARY KEY, Titel VARCHAR(70), Inhalt TEXT, Author VARCHAR(40), Datum DATETIME ); CREATE TABLE News_Kommentare ( ID INT AUTO_INCREMENT PRIMARY KEY, News_ID INT, /* Hier ist die Neue Spalte */ Name VARCHAR(30), Email VARCHAR(70), Inhalt TEXT, Datum DATETIME );
Abb.: Neue Spalte hinzufügen
Wenn eine News beispielsweise die ID 5 hat muss der INSERT-Befehl für den Kommentar wie folgt aussehen:
INSERT INTO News_Kommentar (News_ID, Name, Email, Inhalt, Datum) VALUES ('5', 'Progman', 'Progman@foobar.de', 'echt toll der Newsbeitrag', NOW());
Jetzt haben wir 2 Tabellen die miteinander mit der Spalten News_ID verknüpft wird. Dies sieht dann so aus.
Abb.: Verknüpfung zwischen den Tabellen
Mit folgenden SELECT-Befehl holen wir uns die Kommentare zu einer bestimmten News.
SELECT Name, Email, Inhalt FROM News_Kommentare WHERE News_ID = '5' ORDER BY Datum DESC;
Diesen MySQL-Query kann man z.B. in einer Seite einfügen welche man z.B. mit index.php?section=news_kommentar&ID=5 öffnet. Über den GET Parameter ID wählt man die News aus, aus der man die Kommentare lesen möchte.
Fragen zum aktuellen Thema
- Wie verbindet man Tabellen miteinander?
-
In bestimmten Tabellenspalten kann man die ID eines Eintrages von einer anderen Tabelle speichern. Dadurch kann man dann die Tabellen logisch Verknüpfen. Dies ist z.B. wichtig wenn man mehrere Tabelle JOINen will.