Announcement

Collapse
No announcement yet.

Brauche eine kleine Denkhilfe bei meiner Query

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Brauche eine kleine Denkhilfe bei meiner Query

    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)

    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'

    Ansich müsste es passen, aber ich komm einfach nicht mehr weiter.
    bin für jede hilfe dankbar!

    mfg

  • #2
    Re: denkehilfe

    Hallo kracker,
    ich würds mit unions versuchen, die deine jeweilige semantik verknüpfen:

    Select f_id from foto where f_id not in ( select f_id from G2F)
    UNION
    select f_id from G2F where group_id=0
    UNION
    select G2F.f_id from user join group join U2G join G2F where user=SESSION['user'] and user.user_id=U2G.user_id and G2U.group_id=G2F. group_id

    Dann müsstest du alle foto_ids geliefert bekommen. Einfach noch ne grosse select * from fotos where foto_id in (obere queries).
    Ist sicherlich optimierbar, aber dürfte erstmal die richtigen resultate bringen.
    gruss mara

    Comment

    Working...
    X