burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
06.02.2012, 11:09 Uhr - Impressum

Tutorials - mySQL - SELECT - mehrere Tabellen

Tutorials - mySQL
SELECT: mehrere Tabellen

Deprecated: Function mysql_list_tables() is deprecated in /home/burghi/dummies/classes/class_code.php on line 320
Wenn man eine Datenbank aufbaut, versucht man so wenig Redundanz wie möglich zu erzeugen.
Redundanz bedeutet "Wiederholungen"...
Wenn wir also z.B. für jeden unserer Kunden einen Berater haben, könnte man ihn in der Tabelle hinter dem Kunden eintragen.
Die Folge wäre: Sollte ein Berater für mehrere Kunden zuständig sein, würde er mehrmals in der Kunden-Tabelle stehen.
Und wenn der Berater z.B. heiratet und nen anderen Namen annimmt, muss man viele Einträge ändern.
Daher nimmt man für die Berater eine extra Tabelle und gibt den Beratern, genauso wie die Kunden, eine id.

So wie hier in den Tabellen kunden2 und berater2.
Außerdem bekommt die Tabelle kunden2 eine Spalte, in der eine Berater-Id eingetragen werden kann - also praktisch die Verknüpfung zwischen Kunde und Berater.
Warum in die Kunden-Tabelle? Ganz einfach: weil jeder Kunde nur EINEN Berater haben kann, ein Berater aber VIELE Kunden.
Würde man die Verknüpfung also in Berater einfügen, würde man unbekannt viele Spalten brauchen, in denen man die Kunden-Ids eintragen würde... schlecht...

Die Abfrage, die uns zu jedem Kunden auch noch den Berater liefert schaut folgendemaßen aus:

SELECT ???? FROM `kunden2`, `berater2` WHERE kunden2.berater_id = berater2.id

Die Fragezeichen sind deswegen gesetzt:
-- Sowohl kunden2, als auch berater2 haben die Feldnamen "name" und "vorname"
-- Wenn man anstelle der Fragezeichen ein * setzen würde, würde von beiden Tabellen alle Spalten genommen werden
-- So würden sich diese Felder überlappen, oder besser: berater2.name würde kunden2.name im Endergebnis überschreiben
-- Daher nimmt man a) nur kunden2.*
-- b) nennt man für die Abfrage die Spalten berater2.name und berater2.vorname um
-- zum umbenennen gibts das Wörtchen AS
-- berater2.name AS bName
-- jetzt heißt das Feld bName und kommt nicht mehr in Konflikt mit kunden2.name :-)
-- berater2.vorname AS bVorname analog
benutzte MySQL-Tab. kunden2 berater2
benutzte Codefiles connect_mySQL.php functions/print_table.php
<?php
include("connect_mySQL.php");
include("functions/print_table.php");

$abfrage = mysql_query("SELECT kunden2.*, berater2.name AS bName, berater2.vorname AS bVorname
                         FROM `kunden2`, `berater2`
                         WHERE kunden2.berater_id = berater2.id
");
print_table($abfrage);
?>
© 2004-2005 - Impressum