Brauche eine (kleine - mittlerweile große) Denkhilfe bei meiner Query

fristan

Grünschnabel
Hallo Leute, komme eifnach nicht weiter mit meiner Query:

Ich möchte ALLE Fotos eines bestimmten Benutzers anzeigen lassen, exklusive derer, die in einer Berechtigungsgruppe sind.

Folgende Tabellen:
USERS - userID name nick .........
GALLERYGROUPS - groupID name alias .........
GALLERYGROUP2USERS - groupID userID
GALLERYGROUP2FOTO - groupID fotoID
GALLERYFOTOS - fotoID userID(=erstellerID) ..........

Semantik:
.) Wenn in GALLERYGROUP2FOTO zu einem Foto KEIN eintrag existiert -> Foto ist für ALLE Sichtbar (= auf jeden fall auslesen und anzeigen lassen)
.) Wenn in GALLERYGROUP2FOTO zu einem Foto ein eintrag mit groupID = 0 existiert -> Foto ist für ALLE Sichtbar
.) existiert hingegen mindestens ein Eintrag in dieser Tabelle zu einem Foto -> Foto ist genau für diese Gruppe sichtbar (es kann zu einem Foto auch mehrere Gruppen/Einträge geben)

Hier meine versuchte Query (leider bekomme ich dazu immer ein Empty 0 Rows)

Code:
SELECT a.fotoID, a.name, a.alias, unix_timestamp(a.changeTime), a.teaserImgType, a.description FROM GALLERYFOTOS=a JOIN GALLERYGROUP2FOTO=g1 ON ((a.fotoID=g1.fotoID AND g1.groupID=0) OR (a.fotoID=g1.fotoID AND g1.groupID IS NULL)) JOIN GALLERYGROUP2USERS=g2 ON (a.fotoID = g1.fotoID AND g1.groupID = g2.groupID AND g2.userID = $Session(UserID)) WHERE a.userID='$photoCreatorID'

Umgeschrieben (für einige besser leslich):

PHP:
$sql = 'SELECT
          a.fotoID,
          a.name,
          a.alias,
          unix_timestamp(a.changeTime),
          a.teaserImgType,
          a.description
        FROM
          GALLERYFOTOS AS a 
          JOIN
            GALLERYGROUP2FOTO AS g1
              ON
                ((a.fotoID = g1.fotoID AND g1.groupID = 0)
                OR
                (a.fotoID = g1.fotoID AND g1.groupID IS NULL)) 
          JOIN
            GALLERYGROUP2USERS AS g2
              ON
                (a.fotoID = g1.fotoID
                AND
                g1.groupID = g2.groupID
                AND
                g2.userID = ' . $_SESSION['UserID'] . ')
        WHERE
          a.userID = ' . $photoCreatorID;

Ich komm einfach nicht mehr weiter, nach Stundenlangen Testen bekomme ich entweder 20000 rows heraus (bei momentan 10 Testbildern) oder Empty (0).
bin für jede hilfe dankbar!
 
Hallo,

so ganz hab ichs nicht verstanden, hast Du evtl. ein ER Diagramm ? Ansonsten hilft mir bei sowas immer die tabellen mit FULL JOIN aneinander zu kleben OHNE irgendeine WHERE Clausel (Bei 10 zeilen bietet sich das ja na ;o) ). Desweiteren würde ich die WHERE Bedingung nur einmal schreiben. Beim überfliegen sieht die ja fast gleich aus.
Außerdem ist es immer gut wenn man mit einer WHERE Bedingung startet und dann sukzessive die weiteren anfügt.

Hoffe es hilft ein wenig.

Grüße
 
Hi

so ganz hab ichs eben uach nicht verstanden -->

kann mir einfach nicht mehr helfen, sitz da schon seit monaten herum !
 
Zurück