Ja das ist das Schema tabelle.feld und er wird einfach nur nicht soviel schreiben haben wollen.
Man kann das nur anhand von Tabellen erklären, dieses lassen sich allerdings schlecht darstellen.
Aber ok nehmen wir nochmal die Grundrechte und eine vereinfachte Usertabelle.
Recht
id | name
----------------
0 | Gast
-1 | User
-2 | Superuser
-3 | Trialmember
-4 | Member
-5 | CoLeader
-6 | Leader
-7 | SiteAdmin
-8 | CoAdmin
-9 | Admin
und
User
id | name | recht
---------------------
1 | Hans | -9
2 | Klaus | -3
3 | Susi | -3
4 | Peter | -1
5 | Fehler | 3
So die Tabellen heißen jetzt eben vereinfacht Recht und User.
Die Abfrage von oben auf diese Tabellen angepasst wäre dann.
SELECT User.name, Recht.name AS recht FROM User LEFT JOIN Recht ON User.recht = Recht.id
Also habe ich im Ergebnis nur die in SELECT stehenden Spalten, das AS habe ich eingefügt, da 2 mal name eigentlich nicht geht.
Das LEFT JOIN bewirkt jetzt , das aus der User Tabelle ausgelesen wird und dann nach der Bedingung ein (unter Umständen auch mehrere) Datensatz aus der Recht Tabelle hinzugefügt werden.
User LEFT JOIN recht ON User.recht = Recht.id
User.id | User.name | User.recht | Recht.id | Recht.name
--------------------------------------------------------
1 | Hans | -9 | -9 | Admin
2 | Klaus | -3 | -3 | Trialmember
3 | Susi | -3 | -3 | Trialmember
4 | Peter | -1 | -1 | User
5 | Fehler | 3 | NULL | NULL
So daran kannst du ja sehen, das immer User.recht und Recht.id gleich sind, wie es eben in der Bedingung steht, bei Fehler ist es halt so, dass es keinen solchen Datensatz in der Recht Tabelle gibt, deswegen wird mit NULL aufgefüllt.
Bereinigt auf die SQL Abfrage wäre das Ergebnis halt
name | recht
-----------------------
Hans | Admin
Klaus | Trialmember
Susi | Trialmember
Peter | User
Fehler | NULL
So genug geschrieben, wenns jetzt nicht klar geworden ist kann ich es auch nicht ändern
PS: Ach und der Grund warum ich den Fehler noch eingebunden hatte, war dass ich noch INNER JOIN mit einbringen wollte, da würde der letzte Datensatz im Ergebnis wegfallen, das da nicht einfach Links genommen wird und das Rechts angefügt wird, sondern nur wenn es wirklich auch Links und Rechts gibt, was bei Fehler nicht der Fall wäre, da würde dieser Datensatz wegfallen.
Zuletzt modifiziert von Mairu am 02.08.2008 - 08:09:32