Naar volgende foto waar nog niet op gestemd is
Ik ben bezig met een voting systeem. Alles werkt, alleen nu wil ik nog dat als iemand gestemd heeft op een foto, diegene automatisch doorgaat naar de volgende foto in het wedstrijdalbum waar diegene nog niet op gestemd heeft (alleen leden kunnen voten). Tot hier gaat het goed:
SELECT foto.id, foto.album_id, rating_foto.foto_id, rating_foto.user_id
FROM foto
LEFT JOIN rating_foto
ON foto.id = rating_foto.foto_id
WHERE foto.album_id = $album[albumid]
AND user_id != $user[id]
Ik heb dan het id van alle foto's uit het album, gekoppeld aan de stemmen. Hieruit moet ik dan de id's uithalen, waarop de betreffende user al heeft gestemd. Alleen... hij haalt alle NULL records er ook uit én als er meerdere keren op een foto gestemd is, dan blijft de betreffende id er vaker in staan en dit moet ook niet. Ik heb al het één en ander geprobeerd, bijvoorbeeld alle records selecteren waar user_id IS NULL en met groeperen, maar het lukt mij gewoon niet.
Volgens mij zit ik te ingewikkeld te denken, dus graag jullie hulp!
Gewijzigd op 13/05/2011 21:35:31 door Marianne Wippetnose
en dan zonder een while gaat neerzetten... Dan pakt die maar 1 waarde en heb je dus de eerste nieuwe foto waar nog niet op is gestemd;)
et voila...
Als het niet lukt graag wat relevante code
Dennis meijer op 13/05/2011 23:08:49:
Als je zorgt dat je uit de database alle fotos haalt waar diegene nog niet op heeft gestemd en dan groepeerd op de nieuwste of oudste(wat je zelf wilt) En dan dat met mysql_fetch_object uit de query haalt
en dan zonder een while gaat neerzetten... Dan pakt die maar 1 waarde en heb je dus de eerste nieuwe foto waar nog niet op is gestemd;)
et voila...
Als het niet lukt graag wat relevante code
en dan zonder een while gaat neerzetten... Dan pakt die maar 1 waarde en heb je dus de eerste nieuwe foto waar nog niet op is gestemd;)
et voila...
Als het niet lukt graag wat relevante code
Hele goede methode... NOT! Dus je gaat alle records die voldoen aan de voorwaarden uit de database halen om vervolgens (door middel van het niet gebruiken van een loop) het laatste danwel eerste item weer te geven? Hier sla je de plank volledig mis! Heel erg inefficient! Heb je wel eens gehoord van ORDER BY en LIMIT en de combinatie van deze twee? En mysql_fetch_object vervangen door mysql_fetch_assoc !
SELECT foto.id, album_id, foto_id, user_id
FROM foto
LEFT JOIN rating_foto
ON foto.id = rating_foto.foto_id
WHERE album_id =9
GROUP BY foto.id
HAVING user_id !=68
OR user_id IS NULL
ORDER BY rating_foto.user_id ASC
Het rare is alleen dat als ik dezelfde query gebruik, maar dan sorteer op foto_id (of album_id) er dan ineens maar 131 records uitkomen?!
(Ter illustratie, ik heb twee tabellen, eentje met alle foto's en bij welk album ze horen en eentje met hoeveel sterren er gestemd is op een bepaalde foto en door welke user).
Help... :(
Gewijzigd op 14/05/2011 12:05:30 door Marianne Wippetnose