Hauptmenü

Untermenü

PHP/MySQL - Praxistutorial 3 - Mehrere Tabellen verbinde

1. Die Abschnitte

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.

Tabellen verküpfen

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.

zurück zum vorherigen Abschnitt