Naar volgende foto waar nog niet op gestemd is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marianne Wippetnose

Marianne Wippetnose

13/05/2011 21:21:33
Quote Anchor link
Ik zit even vast en hopelijk kunnen jullie mij weer op weg helpen!

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
 
PHP hulp

PHP hulp

23/05/2024 06:22:58
 
Dennis meijer

dennis meijer

13/05/2011 23:08:49
Quote Anchor link
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
 
Arjan -

Arjan -

14/05/2011 00:35:46
Quote Anchor link
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


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 !
 
Marianne Wippetnose

Marianne Wippetnose

14/05/2011 12:04:36
Quote Anchor link
Ik kom er met name niet uit om de juiste gegevens halen uit de database. In totaal zouden er 148 records uit moeten komen (later zet ik de LIMIT op 1). Dit gaat goed met onderstaande:

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.