PHP/MySQL - Praxistutorial 3 - Mehrere Tabellen verbinde
1. Die Abschnitte
- Überblick
- Das Prinzip
- Theta/Inner Join
- Left/Right Join
- Zusatzbedingungen
- Relationstabellen
- Mehrere Tabellen verbinden
2. Die Aufgabe
Jetzt wollen wir uns eine zugegebenermaßen einfache Übersicht über die Bestellungen holen. Das machen wir mit der gleichnamigen Datei
im Ordner data
. Dabei wollen wir nach bestimmten Informationen suchen, die wir nach den Kunden sortieren.
3. Die Abfrage
$query = 'SELECT
b.anzahl,
p.produkt,
p.preis,
p.nummer,
h.zulieferer,
k.doktor
FROM
bestellung b
LEFT JOIN
produkt p ON p.id = b.pr_id
LEFT JOIN
kunde k ON k.id = b.kd_id
LEFT JOIN
hersteller h ON h.id = b.hr_id
ORDER BY
k.doktor';
Erläuterung
Puh, das sieht ja echt heftig aus! Ist aber einfacher als es aussieht. Zunächst holen wir uns im SELECT
-Teil alle Spalten,
die wir benötigen. Achtet dabei besonders auf die Kürzel vor den Spalten, denn die legen wir später fest. Und zum ORDER BY
werde ich mich auch nicht mehr äußern. Das habe ich schon oft genug getan. Kommen wir nun zu den JOIN
-Orgien.
LEFT JOIN produkt p ON p.id = b.pr_id
Damit verbinden wir die Tabellen bestellung
und produkt
. Das geschieht über den Fremdschlüssel
b.pr_id
, der auf den Eintrag p.id
verweist. Aber das Prinzip haben wir hier ja schon durchgekaut.
LEFT JOIN kunde k ON k.id = b.kd_id
Anschließend verbinden wir die Tabelle bestellung
mit kunde
. Auch hier arbeiten wir mit dem "Foreign Key", also
b.kd_id
.
LEFT JOIN hersteller h ON h.id = b.hr_id
Zu guter Letzt machen wir das auch noch mit der Tabelle hersteller
. Das Prinzip ist wie gehabt.
Wer das nicht verstanden hat, sollte sich die Relationen im vorherigen Abschnitt noch mal anschauen. Oder sich die folgende Graphik genauer ansehen.
4. Die Ausgabe
Zu folgendem Code erzähle ich nichts mehr. Ihr solltet mittlerweile wissen, wohin der gehört und was er bedeutet. Wer es immer noch nicht begriffen hat, soll sich gefälligst die Lösung ansehen und damit herum experimentieren,
$result = mysql_query ($query) or die (mysql_error());
while ($row = mysql_fetch_assoc($result))
{
echo '<tr>
<td>'.$row['anzahl'].'</td>
<td>'.$row['produkt'].'</td>
<td>'.$row['preis'].'</td>
<td>'.$row['nummer'].'</td>
<td>'.$row['zulieferer'].'</td>
<td>'.$row['doktor'].'</td>
</tr>';
}
5. Fazit
Ich hoffe, ich habe euch den Einstieg in die Tabellenverknüpfung nicht zu schwer gemacht. Wer damit trotzdem Probleme hat, sollte sich dieses Tutorial noch mal vornehmen und ein wenig mit den Abfragen herumspielen. Allerdings bleiben noch ein paar Fragen offen. Wie kann man zum Beispiel die Zahlungsmoral mit einbauen? Oder wie berechnet man die Summe der jeweils bestellten Artikel?
Nun, das ist ein wenig komplizierter. Darum werde ich euch auch erst unter dem geplanten Punkt "Advanced MySQL" damit konfrontieren.
Da geht es dann auch um UNION
-Selects und Berechnungen innerhalb von Abfragen. Allerdings kann ich noch nicht sagen, wann
ich damit beginne.