Kanalpirat: Probleme mit JOIN über mehrere Tabellen (mySQL)

Beitrag lesen

Hallo Forum,

die JOINs bringen mich um den Verstand. Folgende Datenbank habe ich hier:

Tabelle kategorie:
ID | Name
---+-------
1  | Blume
2  | Baum

Tabelle rel_kat_grp:
katID | grpID
------+-------
1     | 4

Tabelle gruppe:
ID | Name
---+--------
4  | Monster

Tabelle rel_grp_ben:
grpID | benID
------+--------
4     | 9

Tabelle benutzer:
ID | Name
---+------
9  | Paul

Also, ein Gast darf nur die Kategorie Baum sehen. Paul ist ein Monster und darf Baum und Blume sehen.

Über WHERE-Bedingungen sieht ein Gast gar nichts und Paul nur Blume, weil es in der rel_kat_grp keinen Eintrag für Baum gibt:

  
SELECT kategorie.* FROM kategorie, rel_kat_grp, rel_grp_ben WHERE kategorie.ID = rel_kat_grp.katID AND rel_kat_grp.grpID = rel_grp_ben.grpID AND rel_grp_ben.benID = '9'

Über LEFT JOINs sehen alle alles, weil halt jeder Eintrag in kategorie im Ergebnis auftaucht:

  
SELECT kategorie.* FROM kategorie LEFT JOIN rel_kat_grp ON kategorie.ID = rel_kat_grp.katID LEFT JOIN rel_grp_ben ON rel_kat_grp.grpID = rel_grp_ben.grpID LEFT JOIN benutzer ON rel_grp_ben.benID = '9'

Wie muss ich WHERE und LEFT JOIN mischen?

Anwendung ist ein Menü für eine Homepage. Unangemeldete Besucher sollen nur betimmte Menüeinträge sehen (oben Baum), angemeldete zusätzlich die, die zu den Gruppen (oben Monster) gehören, in denen sie selbst sind.

Hoffentlich habt ihr mich verstanden. :-)

Danke euch!