Heftiger Select

Guten Tag!

In meiner ersten Frage hier im Board richte ich mich an die SQL-Spezialisten.

Ich habe in meiner mySQL-Datenbank unter anderem fünf Tabellen für die ein SELECT-Statement abgesetzt werden soll in dem die Gruppenzugehörigkeiten und Rechte eines Benutzers ermittelt werden sollen.

Tabelle: db_nk10_users
Felder: userid (1, 2, 3, ...), username (xxxxxxx)

Tabelle: db_nk31_lt_members
Felder: userid (1, 2, 3, ...), groupid (1, 2, 3, ...)

Tabelle: db_nk32_groups
Felder: groupid (1, 2, 3, ...), groupname (Administratoren, User, ...)

Tabelle: db_40_lt_rights
Felder: groupid (1, 2, 3, ...), rightid (1, 2, 3, ...)

Tabelle: db_41_rights
Felder: rightid (1, 2, 3, ...), right (Verschiedene Rechte)

Ich bin noch relativ neu und habe Schwierigkeiten den SELECT zu bilden. Für Tipps wäre ich dankbar.
Ach ja: Teilweise funktioniert es. Ich bekomme mit dem u. g. Statement heraus in welchen Gruppen der User ist. Wie erreiche ich es jedoch das auch noch die Rechte die er hat mit angezeigt werden?

Mein Statement:
SELECT DISTINCT db_nk10_users.username, db_nk31_lt_members.userid, db_nk32_groups.groupid, db_nk32_groups.groupname
FROM db_nk31_lt_members, db_nk10_users
INNER JOIN db_nk32_groups ON db_nk31_lt_members.groupid = db_nk32_groups.groupid
WHERE db_nk31_lt_members.userid =1
AND db_nk10_users.username = 'fix0iag'
LIMIT 0 , 30
 
Zuletzt bearbeitet:
Das Ergebnis dieses Statements ist dieses.
Es fehlen nur noch die Rechte des Users.

username userid groupid groupname
fix0iag 1 1 Administrators
fix0iag 1 4 SE-PE
fix0iag 1 5 SE-PE-Private
fix0iag 1 6 SE-PE-Secretly
fix0iag 1 10 Global
 
Na, so heftig ist der doch gar nicht... :)
Du hast das doch scheinbar schon ganz gut im Griff.
Da brauchst du doch nur noch ein
INNER JOIN db_40_lt_rights ON db_40_lt_rights.groupid = db_nk32_groups.groupid
INNER JOIN db_41_rights ON db_41_rights.rightid = db_40_lt_rights.rightid
ergänzen.

Und dann kannst du db_41_rights.right ganz einfach ausgeben.
Wenn es User ohne Rechte gibt musst du RIGHT OUTER JOIN vor db_40_lt_rights schreiben. :)
 
Hallo!

Danke für die schnelle Hilfe.
Könntest du mir mal das komplette Statement posten.
Ich habe da irgendwie eine Denkblockade.
Wäre klasse. Danke im voraus!
 
Wie jetzt? :confused:
Die Joins einfügen eben:
Code:
SELECT DISTINCT db_nk10_users.username, db_nk31_lt_members.userid, db_nk32_groups.groupid, db_nk32_groups.groupname
FROM db_nk31_lt_members, db_nk10_users
INNER JOIN db_nk32_groups ON db_nk31_lt_members.groupid = db_nk32_groups.groupid
INNER JOIN db_40_lt_rights ON db_40_lt_rights.groupid = db_nk32_groups.groupid
INNER JOIN db_41_rights ON db_41_rights.rightid = db_40_lt_rights.rightid 
WHERE db_nk31_lt_members.userid =1
AND db_nk10_users.username = 'fix0iag'
LIMIT 0 , 30
 
Hallo!

Es tut mir leid das ich hier eine Anfängerfrage (bin auch Anfänger in dem Bereich) stellen muss, aber der SELECT bringt offenbar nicht das gewünschte Ergebnis (Vergleiche). Es werden die Rechte korrekt ausgegeben, aber nicht alle Benutzergruppen. Laut dem Ergebnis ist der User nur in der Gruppe "Administrators" ist aber tatsächlich in mehreren Gruppen.

username userid groupid groupname right
fix0iag 1 1 Administrators Datei beschaffen
fix0iag 1 1 Administrators Warenkorb benutzen
fix0iag 1 1 Administrators User anlegen
fix0iag 1 1 Administrators User ändern

Diese Statement wurde ebend von mir abgesetzt:
SELECT DISTINCT db_nk10_users.username, db_nk31_lt_members.userid, db_nk32_groups.groupid, db_nk32_groups.groupname, db_nk41_rights.right
FROM db_nk31_lt_members, db_nk10_users
INNER JOIN db_nk32_groups ON db_nk31_lt_members.groupid = db_nk32_groups.groupid
INNER JOIN db_nk40_lt_rights ON db_nk40_lt_rights.groupid = db_nk32_groups.groupid
INNER JOIN db_nk41_rights ON db_nk41_rights.rightid = db_nk40_lt_rights.rightid
WHERE db_nk31_lt_members.userid =1
AND db_nk10_users.username = 'fix0iag'
LIMIT 0 , 30
 
Zurück