Sven Rautenberg: suche Hilfe bei DB-Abfrage - MySQL

Beitrag lesen

Moin!

Andererseits hast du sowieso ein sehr ekliges zirkuläres Konstrukt, dass in sich problemlos inkonsistent werden kann - bzw. durch ungeschickte Dateneinträge alles ausschließt.

Wie gesagt, ich bin für jeden Vorschlag offen. Was meinst du mit dem Satz?

Du hast Module, Seiten und Gruppen.

Zu einem Modul gehören mehrere Seiten. Aber eine Seite kann auch zu mehreren Modulen gehören.

Ein Modul gehört mehreren Gruppen. Und eine Gruppe hat mehrere Module.

Eine Seite gehört zu mehreren Gruppen. Und eine Gruppe hat mehrere Seiten.

  • das ist mal ausformuliert das, was du bislang in deiner ASCII-Grafik modelliert hast.

Was ich da komisch finde:

  • Eine Seite gehört zu mehreren Modulen? Hängt natürlich davon ab, was für dich "Seite" ist, aber ich würde das nicht so machen. Eine Seite sollte immer genau zu EINEM Modul gehören.

Und wenn diese Verknüpfung herausfällt, dann brauchst du auch nicht mehr die Seite den Gruppen zuordnen, sondern diese Zuordnung entsteht indirekt durch die Verknüpfung über die Module.

Anstatt des Kreises hast du dann nämlich eine relativ einfache Kette:

User <- n:m -> Gruppen <- n:m -> Module <- 1:n -> Seiten

Und so eine Kette ist dann deutlich einfacher abzufragen

Und dein Ausgangsproblem:

Nun zu meinem Problem. Gegeben sei mir eine Benutzer-ID und eine Seiten-ID.
Ich suche eine Abfrage die mir alle Gruppen-IDs des Benutzers gibt, die Seiten-Daten falls zur Gruppe gehörend (im Beispiel blöderweise auch nur die ID) und alle Module die zur Seite und zur Gruppe gehören.

Grundsätzlich würde ich die einem User zugeordneten Gruppen immer mit in die Session ziehen, denn Zugriffsrechte orientieren sich an der Gruppe, nicht am User.

Und selbst wenn das nicht geht: Die Benutzer-ID steht in der n:m-Tabelle zwischen User und Gruppen, die Seiten-ID steht in der Seitentabelle - beide Tabellen enthalten als Verknüpfungspunkt die Gruppen-ID bzw. die Modul-ID, welche beide ihrerseits in der n:M-Tabelle zwischen Gruppen und Modulen verknüpft sind.

Du fragst also im Prinzip erstmal nur die verbindenden Tabellen ab. Nur wenn dich zu einer ID auch die Details interessieren, kannst du die zugehörige Tabelle am Ende auch noch hineinjoinen und abfragen.

- Sven Rautenberg