MySQL - Joins - Alias
1. Gib dem Kind einen Namen
Solange man es nicht Kevin oder Jaqueline nennt. Spaß beiseite, wir wollen ja was lernen. Also! Wenn man mit Abfragen über mehrere Tabellen arbeitet, so muss man sich über ein paar Dinge im Klaren sein. Denn sonst kommt man später in die Bredouille.
2. Das Problem
Tabelle 'bla' Tabelle 'laber'
+--+------+ +--+-------+
|id|blubb | |id|blubber|
+--+------+ +--+-------+
| 1|a | | 1|x |
| 2|b | | 2|y |
+--+------+ +--+-------+
Wenn man nun nach den Spalten blubb
und blubber
sucht, so reicht ein einfaches SELECT blubb, blubber
FROM ...
völlig aus, da die beiden Spalten unterschiedliche Namen haben. Es gibt nur ein Problem. Wenn man die Datenbankstruktur
nicht auswendig im Kopf hat, so weiß man auf Anhieb nicht, welche Spalte sich in welcher Tabelle befindet.
Und was passiert, wenn man die gleichnamigen Spalten id
auch noch haben möchte? Dann gibt es unter Umständen später Probleme
mit PHP, weil das damit nicht klar kommt. Warum? Ganz einfach. Der Name einer Spalte wird bei einem mysql_fetch_assoc
als Wert
für das entsprechende assoziative Array benutzt. Und wenn MySQL zwei Spalten gleichen Namens zurückliefert, so kommt nur Letzteres bei PHP
an.
3. Lösungen
Möglichkeit 1
Man kombiniert die Spalten- mit den Tabellenamen, also
SELECT
bla.id,
bla.blubb,
laber.id,
laber.blubber
FROM
bla, laber
Möglichkeit 2
Man legt für den Tabellennamen einen Alias an. Da Programmierer eigentlich ziemlich tippfaul sind, nimmt man gewöhnlich und so weit wie möglich den Anfangsbuchstaben der Tabelle.
SELECT
b.id,
b.blubb,
l.id,
l.blubber
FROM
bla b,
laber l
4. Gleichnamige Spalten
Wie ich schon sagte, gibt es in der Situation Probleme mit PHP. Daher sollte man auch gleichnamigen Spalten einen Alias verpassen. Im
Gegensatz zu den Tabellen benötigt man hier ein AS
.
SELECT
b.id AS b_id,
b.blubb,
l.id AS l_id,
l.blubber
FROM
bla b,
laber l
5. Wichtig
Wenn man sowohl den Tabellen als auch den Spalten einen Alias verpasst, so hat das keine Auswirkung auf die tatsächliche Struktur einer Datenbank. Es geht ausschließlich um die Namen der Rückgabewerte, die zum Beispiel von PHP verarbeitet werden müssen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt