hallo klaus
Soweit ich Dein Statement richtig interpretiere, _willst_ Du eine Unmenge von Daten sehen. Du willst ja jede Kombination aus den angegebenenwerten sehen. Da kann dann schon was zusammenkommen.
Eigentlich ist es ein Kreuzprodukt von den angebenen Tabellen (naja nicht ganz wahrscheinlich)
Da helfen auch keine JOINS, weil Du willst ja alles sehen.
hmm ich habe mich da so auf die frage konzentriert, wie ich das mit den joins lösen soll, dass ich den sql-ausdruck versaut habe. natürlich sollte das ganze mit dem aktuellen benutzer und der aktuellen site passieren.
Wenn ich Dich richtig verstehe, was natürlich nicht der Fall sein kann, dann willst Du eigentlich alle Rollen wissen, welche aktuell gültig sind.
also:
Ich postuliere mal einige Variablen (PHP ist da gleich wie Perl, oder irre ich mich, naja egal, Du wirst es schon lesen können, alle Dinge mit einem '$' vorn sind die Variablen)
siehe oben
Dann könnte das Statement so aussehen:
(Ich mach mal aus 'Roules' 'Roles', weils besser aussieht ;-) )
äh peinlich *g*
SELECT r.RID
»» FROM Roles r, UserRoles ur, SiteRoles sr
»» WHERE r.RID = ur.RID
»» AND r.RID = sr.RID
»» AND ur.UID = $AktuelleUID
»» AND sr.SID = $AktuelleSID
genauso hab ichs mir eigentlich gedacht, d.h. soweit war ich mit dem ganzen: tabellen mit der WHERE klausel zu verknüpfen.
ich kann das ganze mal in zwei selects darstellen...
das würde dann für mein beispiel so aussehen:
SELECT sites.SiteID, siteroles.SiteID, siteroles.RID
FROM sites LEFT JOIN siteroles USING (SiteID)
WHERE sites.SiteID = $AktuelleSID;
SELECT mitglieder.UID, userroles.UID, userroles.RID
FROM mitglieder LEFT JOIN userroles USING (UID)
WHERE mitglieder.UID = $AktuelleUID;
Diese zwei Selects müssten nun via RID verknüpft werden:
SELECT1 JOIN SELECT2 USING (RID); (das ist natürlich syntaktisch falsch)
geht das irgendwie zusammen, oder muss ich da temporäre tabellen anlegen?
vielen dank
llap
Siramon