Tabellen verbinden

daddz

Mitglied
Hallo!

Eine Gedankenblockade hält mich mal wieder vom weiterarbeiten ab.
Ich habe folgende Tabellen(aufs wesentliche gekürzt):
User:
Code:
idUser | Name
Modul:
Code:
idModul | Name
Usermodul:
Code:
idUsermodul | User_idUser | Modul_idModul
Mit was für einem SQL-Statement kann ich nun so ein Ergebnis bekommen:
Code:
User | Alle Modulnamen die die User id dieses Users haben
Also mit Beispielen solls so aussehen:
Code:
Mustermann | Modul1, Modul2
Mustermann | Modul2, Modul4
Hab ich eine ungünstige DB-Strukur gewählt? Wenn ja, wie solls ichs ändern?

Ich hoffe ihr könnt mir weiterhelfen! ;-)

Danke schonmal!

greetz
daddz
 
Die Datenstruktur ist im Sinne der Normalisierung im Grunde perfekt, nur über die künstliche ID in der Usermodul-Tabelle könnte man sich streiten. Die ist zumindest unüblich, es sei denn, ein und derselbe User kann mehrfach mit dem selben Modul verknüpft sein.

Die Abfrage, die Du vohast, läßt sich mit GROUP_CONCAT lösen. Dazu wird allerdings MySQL ab 4.1 benötigt:
SQL:
select 
  User.idUser,
  User.Name,
  group_concat(DISTINCT Modul.Name
      ORDER BY Modul.Name ASC 
      SEPARATOR ', ')
    as Module
FROM User
LEFT JOIN Usermodul
  ON Usermodul.User_idUser=User.idUser
LEFT JOIN Modul
  ON Usermodul.Modul_idModul=Modul.idModul
GROUP BY User.idUser
Steht MySQL nicht ab 4.1 zur Verfügung, musst Du statt nach idUser zu gruppieren, nach dem Feld (und ggf. auch nach dem Modulnamen) sortieren und in PHP mit einer Hilfsvariablen in der Du Dir den User merkst um den Wechsel zum nächsten User festzustellen, das Ergebnis durchgehen und entsprechend ausgeben. Beispiele dazu gab es schon mehrfach hier im Forum, z.B. dieses.

Gruß hpvw
 
Wow!
Also ich muss sagen deine SQL-Kenntnisse überraschen mich jedes mal von neuem! ;)
Das Statement funktioniert wunderbar. ;-)
...nur über die künstliche ID in der Usermodul-Tabelle könnte man sich streiten. Die ist zumindest unüblich, es sei denn, ein und derselbe User kann mehrfach mit dem selben Modul verknüpft sein.
Meinst du damit idUsermodul? Diese ID hab ich entfernt, da ich auch gemerkt habe, dass sie sinnlos ist. :suspekt:
Danke für deine Hilfe.

greetz
daddz
 
Zurück