• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Join

freakXHTML

Mitglied
Hallo zusammen,

ich bin dabei ein Forum zu programmieren. Nun hat jeder Benutzer einen Rang. Dabei gibt es drei verschiedenen Ränge, nämlich "Mitglied", "Administrator", "Moderator". Jedoch soll jeder Ränge wieder verschiedene Statusnamen besitzen. Das bedeutet, dass zum Bespiel

"Anfänger, "Fortgeschrittener", "Besserwisser" alle den Rang eines Mitglied haben sollen, aber zum Beispiel

"Der Boss", "Chef", "Der Einzige" sollen alle den Rang eines Administrators haben.

Nun habe ich einer Tabelle mit allen Benutzern. Es gibt eine Spalte mit der Bezeichnung "Rang". Dort steht entweder 1 (Mitglied), 2(Moderator) oder 3(Administrator).

Angenommen dort steht eine 1. Dann schaue ich in Tabelle 1 nach, welche StatusID dort zu dem entsprechenden Nutzer steht. Zuletzt gehts dann in die dritte Tabelle, wo dann zu der StatusID die entsprechende Bezeichnung wie "Anfänger" steht.

Das war die Erklärung. Nun bin ich dabei eine SQL Abfrage zu gestalten, die mir die Statusbezeichnung eins Benutzers ausliest.

Dazu lese ich erst die StatusID aus, indem ich einen Join mache:

PHP:
$sql = 'SELECT StatusID FROM tabelle1, user WHERE tabelle1.UserID = user.ID';

Hier kommt aber schon das erste Problem. Ich weiß nicht, welche Tabelle ich mit welcher joinen muss. Wenn als Rang unter Benutzern eine 1 steht, dann muss ich mit der ersten Tabelle einen Join machen. Wenn dort eine 2 steht, dann muss das mit der zweiten geschenen. Klar, alles mit Fallunterscheidungen machen, doch hat jemand eine Idee, wie ich mein Problem besser lösen könnte?

Zum Schluss will ich nämlich die Statusbezeichnung eines Users herausfinden....

Ich hoffe, ihr versteht mich!

Viele Grüße
freakXHTML
 
Code:
SELECT user.name, status.statusbezeichnung
FROM user AS u
LEFT JOIN status ON status.statusid = user.statusid

Wenn ein Nutzer einen Status hat, steht dieser dann im Ergebnis.
Wenn ein Nutzer keinen Status hat, kommt zumindest sein Name raus.

Merke: du solltest für solche Abfragen nicht einzelne Abfragen machen sondern globale Statements definieren. Mein Entwurf hier kann als Teil eines einzigen Statements zur Ermittlung aller Daten eines Nutzers dienen. Das schont den Server und ist performanter als 3 bis X Statements für eine Information auszuführen.
 
Zurück
Oben