Relationale Daten
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
| id | name | standort | farbe |
|---|---|---|---|
| 1 | Rose | sonnig | 103 |
| 2 | Veilchen | schattig | 104 |
| 3 | Tulpe | halbschatten | 103 |
| 4 | Orchidee | feucht | 100 |
| 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 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 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>";
}
?>
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>";
}
?>
Rose
Tulpe