Hugo Egon Balder: MySQL SELECT Abfrage gesucht

Beitrag lesen

Hi dedlfix,

zunächst ein mal danke fürs Antworten! (Auch Dir, MudGuard!)

Mit extra User-Gruppen- und Gruppen-Artikel-Tabellen (jeweils m:n-Beziehung) kann man eine Abfrage mit zwei geschachtelten Subquerys (oder drei, wenn man vom Usernamen statt der ID ausgeht) schreiben:

verstehe ich Dich richtig, dass das dann auf 5 Tabellen rausläuft?

1.) Tabelle 'user':

id | name
---------------------
1  | Hans Bacher
2  | Claudia Blum
3  | Max Mustermann
4  | Tobias Huber
5  | Hans Gockel
6  | Ferdinand Müller
7  | Hugo Egon Balder

2.) Tabelle 'gruppen':

id | gruppe
-------------
1  | Familie
2  | Freunde
3  | Bekannte
4  | Gäste
5  | Admin

3.) Tabelle 'user_in_gruppen':

id | user | gruppe
------------------
1  | 1    | 1
2  | 1    | 2
3  | 1    | 3
4  | 2    | 1
5  | 2    | 2
6  | 2    | 3
7  | 3    | 2
8  | 3    | 3
u.s.w. [...]

4.) Tabelle 'artikeln':

id | titel
-----------------------
1  | Familienfotos
2  | Ein Gedicht
3  | Restaurantkritik
4  | Berlinfotos
5  | Meine Liebschaften
6  | Foo
7  | Blaa

5.) Tabelle 'artikel_fuer_gruppen':

id | artikel | gruppe
---------------------
1  | 1       | 1
2  | 1       | 5
3  | 2       | 1
4  | 2       | 2
5  | 2       | 3
6  | 2       | 5
7  | 3       | 1
8  | 3       | 2
u.s.w. [...]

Aber das ist doch exakt das, was auch MudGuard vorgeschlagen hat. Und das hast Du doch kritisiert! Oder bezog sich Deine Kritik nicht auf die Art der Tabellen sondern darauf, dass er mit Joins arbeiten würde?

etwas einfacher formuliert, von innen nach außen: Wähle alle Gruppen-IDs aus der User-Gruppentabelle für die User-ID des gesuchten Users. Wähle alle Artikel-IDs aus der Artikel-Gruppen-Tabelle deren Gruppen-ID in der Ergebnismenge der vorhergehenden Abfrage ist. Wähle alle Artikel, deren ID in der Ergebnismenge der vorherigen Frage ist.

OK, ich bilde mir zwar ein, dass jetzt nach mehrmaligem Lesen von der Logik her verstanden zu haben, wie ich das jetzt mit Subqueries verwirklichen soll, ist mir leider nicht klar, da ich noch nie mit Subqueries gearbeitet habe.

Vorsausgesetzt, ich habe Dich, was die Tabellen betrifft, richtig verstanden und ich möchte jetzt alle Artikeln aufgelistet bekommen, die für den User mit der ID '3' freigegeben sind (also sprich für die Gruppen, deren "Mitglied" er ist) ... wie müsste dann eine SELECT Anweisung aussehen?

Mit freundlichen Grüßen

Hugo Egon Balder