Besoin d'aide pour créer une requete SQL
Résolu/Fermé
roms75001
Messages postés
395
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
9 juillet 2017
-
Modifié par roms75001 le 2/02/2017 à 13:23
roms75001 Messages postés 395 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 - 3 févr. 2017 à 14:23
roms75001 Messages postés 395 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 - 3 févr. 2017 à 14:23
A voir également:
- Besoin d'aide pour créer une requete SQL
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Comment créer un groupe whatsapp - Guide
- Créer une adresse hotmail - Guide
- Créer un lien pour partager des photos - Guide
2 réponses
roms75001
Messages postés
395
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
9 juillet 2017
7
Modifié par roms75001 le 2/02/2017 à 15:55
Modifié par roms75001 le 2/02/2017 à 15:55
Bon pour ceux que ca intéresse j'ai trouvé la solution (surement pas la plus optimale) mais ça fonctionne :
Si quelqu'un aurait une solution plus optimisée je suis preneur :)
SELECT COUNT(*) AS nombre_vote, tmp.id_participation AS id_gagnant, tmp.source_photo AS img_gagnant FROM ( SELECT p.id AS id_participation, p.source_photo, p.concours_id FROM vote v JOIN participation p ON v.participation_idparticipation = p.id WHERE concours_id = '1' ) AS tmp GROUP BY id_participation HAVING nombre_vote = ( SELECT MAX(t2.nombre_vote) AS nombre_vote_max FROM( SELECT COUNT(*) AS nombre_vote, tmp.id_participation AS id_gagnant, tmp.source_photo AS img_gagnant FROM ( SELECT p.id AS id_participation, p.source_photo, p.concours_id FROM vote v JOIN participation p ON v.participation_idparticipation = p.id WHERE concours_id = '1' ) AS tmp GROUP BY id_participation ) AS t2 )
Si quelqu'un aurait une solution plus optimisée je suis preneur :)
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
Ambassadeur
1 556
Modifié par yg_be le 2/02/2017 à 17:25
Modifié par yg_be le 2/02/2017 à 17:25
bonjour, tu as donc des photos, des concours, des personnes et des votes.
tu ne décris pas clairement comment ces entités sont stockées dans tes tables.
si je comprends bien, tu as une table vote qui contient pour chaque vote, l'ID de la photo choisie. c'est exact?
et tu cherches, par concours, la photo ayant le plus de votes. c'est exact?
je pense que tu peux commencer par:
cela te donne, je pense, les votes par photo.
tu ajoutes ensuite un "order BY" pour classer par nombre de votes:
si cela fonctionne, tu ajoutes LIMIT, pour ne récupérer que le premier:
tu ne décris pas clairement comment ces entités sont stockées dans tes tables.
si je comprends bien, tu as une table vote qui contient pour chaque vote, l'ID de la photo choisie. c'est exact?
et tu cherches, par concours, la photo ayant le plus de votes. c'est exact?
je pense que tu peux commencer par:
SELECT count(*) as n_votes, p.id AS id_participation, p.source_photo, p.concours_id FROM vote v JOIN participation p ON v.participation_idparticipation = p.id WHERE concours_id = '1' GROUP BY id_participation, p.source_photo, p.concours_id
cela te donne, je pense, les votes par photo.
tu ajoutes ensuite un "order BY" pour classer par nombre de votes:
SELECT count(*) as n_votes, p.id AS id_participation, p.source_photo, p.concours_id FROM vote v JOIN participation p ON v.participation_idparticipation = p.id WHERE concours_id = '1' GROUP BY id_participation, p.source_photo, p.concours_id ORDER BY n_votes DESC
si cela fonctionne, tu ajoutes LIMIT, pour ne récupérer que le premier:
SELECT count(*) as n_votes, p.id AS id_participation, p.source_photo, p.concours_id FROM vote v JOIN participation p ON v.participation_idparticipation = p.id WHERE concours_id = '1' GROUP BY id_participation, p.source_photo, p.concours_id ORDER BY n_votes DESC LIMIT 1
roms75001
Messages postés
395
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
9 juillet 2017
7
3 févr. 2017 à 14:23
3 févr. 2017 à 14:23
Bonjour,
Merci pour ta réponse mais j'ai trouvé une solution beaucoup plus optimisé.
Pour ceux que ça intéresse la voici :
Merci pour ta réponse mais j'ai trouvé une solution beaucoup plus optimisé.
Pour ceux que ça intéresse la voici :
SELECT vote.participation_idparticipation, users.*, participation.source_photo FROM concours INNER JOIN participation ON participation.concours_id = concours.id INNER JOIN vote ON vote.participation_idparticipation = participation.id INNER JOIN users ON users.id_fb = participation.users_id_fb WHERE concours.id = 1 GROUP BY vote.participation_idparticipation HAVING COUNT(vote.participation_idparticipation) ORDER BY vote.participation_idparticipation DESC LIMIT 1