Suche nach als

Relationale Daten

Auf dieser Seite:

Daten aus mehreren Tabellen auswählen, z.B. aus einer 'Relationalen (verknüpften) Datenbank'. In der Datenbank 'pflanzen' hat es eine Tabelle 'blumen' in deren Spalte 'farbe' wird jeweils nur die Schlüsselzahl angegeben, durch welche die Farbbezeichnung in der Tabelle 'farbe' zu finden ist. Dadurch wird Redundanz vermieden: Statt 1000 mal in Tabelle 1, steht einmal 'rot' in Tabelle 2.

Tabellen-Verknüpfungen ausgeben

Tabelle 'blumen' (tabelle1)
id name standort farbe
1 Rose sonnig 103
2 Veilchen schattig 104
3 Tulpe halbschatten 103
4 Orchidee feucht 100
Tabelle 'farbe' (tabelle2)
id farbe
100 weiss
101 gelb
102 orange
103 rot
104 violett
105 blau
106 grün

FROM tabelle1, tabelle2 WHERE

Auswahl mit WHERE

zuerst schematisch:
SELECT tabelle1.spalte2, tabelle2.spalte2
FROM tabelle1, tabelle2
WHERE tabelle1.spalte4 = tabelle2.spalte1

Die Verbindung zu Server und Datenbank muss natürlich schon hergestellt sein.

<?php
# Abfrage formulieren - in einfachen Anführungszeichen
$wahl = 'SELECT blumen.name AS blumenname, farbe.farbe AS farbbezeichnung FROM blumen, farbe WHERE blumen.farbe = farbe.id';
# Abfrage durchführen
$abfrage = mysql_query($wahl);
# Abfrage zur Darstellung übergeben
while($zeilen = mysql_fetch_object($abfrage))
{
echo "Die Blume ","$zeilen->blumenname"," hat die Farbe: ","$zeilen->farbbezeichnung","<br>";
}
?>

Die Blume Rose hat die Farbe: rot
Die Blume Wald Veilchen hat die Farbe: violett
Die Blume Tulpe hat die Farbe: rot
Die Blume Tiger Orchidee hat die Farbe: weiss

Die Letzte Zeile könnte man auch so versuchen:
echo 'Die Blume '.$zeilen['blumenname'].' hat die Farbe:
'.$zeilen['farbbezeichnung'].'<br>';

Aliase für Tabellen

Um solchen Code zu verkürzen, kann jeder Tabelle bei deren FROM-Aufruf ein Alias gegeben werden. Der Alias wird hinter den Tabellennamen (nach einem Leerschlag ohne Komma!) notiert. Hier wird der Tabelle 'blumen' der Alias 'b' und der Tabelle 'farbe' der Alias 'f' zugeteilt (die Umwandlung der Spaltenbezeichnung mit AS habe ich hier weggelassen):

<?php
# Auswahl
$wahl = 'SELECT b.name, f.farbe FROM blumen b, farbe f WHERE b.farbe = f.id';
# Abfrage
$abfrage = mysql_query($wahl);
# Darstellung
while($zeilen = mysql_fetch_object($abfrage))
{
echo "Die Blume ","$zeilen->name"," hat die Farbe: ","$zeilen->farbe","<br>";
}
?>

Die Blume Rose hat die Farbe: rot
Die Blume Wald Veilchen hat die Farbe: violett
Die Blume Tulpe hat die Farbe: rot
Die Blume Tiger Orchidee hat die Farbe: weiss

Spezifische Auswahl

Möchte ich die Auswahl enger eingrenzen, wird die Bedingung WHERE noch komplizierter. Ich möchte z.B. nur alle roten Blumen:

<?php
# Auswahl - alles auf einer Zeile
$wahl = 'SELECT b.name, f.farbe FROM blumen b, farbe f
WHERE (b.farbe = f.id) AND (f.farbe = "rot") ORDER BY name';
# Abfrage
$abfrage = mysql_query($wahl);
# Darstellung
echo "Meine roten Blumen:<br>";
while($zeilen = mysql_fetch_object($abfrage))
{
echo "$zeilen->name","<br>";
}
?>

Meine roten Blumen:
Rose
Tulpe

Spezifische Auswahl mit LEFT JOIN

LEFT JOIN

<?php
# Auswahl
$wahl = 'SELECT b.name FROM blumen b
LEFT JOIN farbe f ON b.farbe = f.id
WHERE f.farbe = "rot" ORDER BY name';
# Abfrage
$abfrage = mysql_query($wahl);
# Darstellung
echo "Meine roten Blumen:<br>";
while($zeilen = mysql_fetch_object($abfrage))
{
echo "$zeilen->name","<br>";
}
?>

Meine roten Blumen:
Rose
Tulpe


Valid XHTML 1.0 Check den Code.

Tabelle ausgeben >> << Daten löschen
Ich bin hier: > PHP Lehrling >>> Relationale Daten
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 08.12.2010