PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche eine kleine Denkhilfe bei meiner Query


kracker
20.02.2008, 14:51:29
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

|Coding
20.02.2008, 21:15:23
Hi!

ich habe mir das Query jetzt nicht näher angesehen, aber Du hattest Dich da etwas mit dem Tabellenalias verlaufen und der Teil mit "$Session(UserID)", kommt mir auch spanisch vor, habe das Query jetzt nur Mal nach Gefühl angepass :-)

Versuch es doch Mal so:

$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;

kracker
05.03.2008, 16:02:12
Hallo !

vielen dank für deine Antwort - ich bin immer noch nicht weitergekommen, habe heute den kampf wieder aufgenommen - verzweifel irgendwie schon.


>der Teil mit "$Session(UserID)", kommt mir auch spanisch vor
wie meinst du das ? - ich entwickel nicht unter PHP, also die Variable stimmt in dem Fall auf jeden fall.


ich versuch das jetzt alles in worte auszudrücken:

.) Wenn in GALLERYGROUP2FOTO zu einem Foto KEIN eintrag existiert ->
Foto ist für ALLE Sichtbar (= auf jeden fall auslesen und anzeigen lassen)
----> OR NOT EXISTS (SELECT * FROM GALLERYGROUP2FOTO=g3 WHERE
g3.fotoID=a.fotoID)

.) Wenn in GALLERYGROUP2FOTO zu einem Foto ein eintrag mit groupID = 0
existiert -> Foto ist für ALLE Sichtbar
----> (g1.groupID=0 AND a.fotoID = g1.fotoID AND u.userID=a.userID)

.) 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)
----> (u.userID=a.userID AND a.fotoID=g1.fotoID AND
g1.groupID=g2.groupID AND g2.userID=$Session(UserID))

Hoffentlich war das verstädnlich