Hallo Forum,
ich würde gerne wissen, ob es für folgendes Ziel eine halbwegs einfache MySQL SELECT-Anweisung gibt:
In einer DB werden zunächst verschiedene Gruppen mit einer ID definiert:
Tabelle 'gruppen':
id | gruppe
-----------
1 | Familie
2 | Freunde
3 | Bekannte
4 | Gäste
5 | Admin
In einer weiteren Tabelle werden User, die zu mindestens einer oder zu mehreren Gruppen gehören können, eingetragen:
Tabelle 'user':
id | name | gruppen
-------------------------------
1 | Hans Bacher | 1, 2, 3
2 | Claudia Blum | 1, 2, 3
3 | Max Mustermann | 2, 3
4 | Tobias Huber | 3
5 | Hans Gockel | 2, 3
6 | Ferdinand Müller | 4
7 | Hugo Egon Balder | 1, 2, 3, 4, 5
In eine dritten Tabelle kommen nun verschiedene Artikeln sowie jene Gruppen, die eine Leseberechtigung für den jeweiligen Artikel haben:
Tabelle 'artikeln':
id | titel | gruppenerlaubnis
------------------------------------------
1 | Familienfotos | 1, 5
2 | Ein Gedicht | 1, 2, 3, 5
3 | Restaurantkritik | 1, 2, 3, 4, 5
4 | Berlinfotos | 1, 2, 3, 4, 5
5 | Meine Liebschaften | 5
6 | Foo | 2
7 | Blaa | 3
Nun möchte ich, nachdem sich ein User eingeloggt hat (also die id der Tabelle 'user' ist gegeben), alle Artikeln auflisten, die für die Gruppen des Users freigegeben sind.
Wenn also zB die id '3' für Max Mustermann gegeben ist, sollten die Artikeln 2, 3, 4, 6, 7 aufgelistet werden, weil diese entweder für eine oder beide der Gruppen, denen der User zugeordnet ist, freigegeben sind.
Wie würdet Ihr das lösen? Irgendwas in die Richtung … WHERE FIND_IN_SET(…) … vielleicht?
Oder soll ich eine völlig andere Tabellenstruktur nehmen?
Danke im Voraus für jeden Input!
Mit freundlichen Grüßen
Hugo Egon Balder