JeuWeb - Crée ton jeu par navigateur
[Optimisation] Système de 'propositions' - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Optimisation] Système de 'propositions' (/showthread.php?tid=1435)



[Optimisation] Système de 'propositions' - Amrac - 06-07-2007

Bonjour,
J'ai, sur mon site, un système de proposition qui permet aux joueurs d'émettre des suggestions et de voter pour ou contre.

Mes tables se présente de la sorte: (Je vous est mis juste le nécessaire)

Table Joueur:
IDJoueur

Table vote
IDJoueur
IDProposition

Table Proposition
IDProposition

Je souhaite afficher toutes les propositions, et pour chaque proposition je dois savoir si le joueur qui affiche la page à déjà voté ou non.
Actuellement,j'ai une requete qui prend toutes les propositions (SELECT * from proposition), puis pour chaque requete je vérifie si le joueur a déjà voté ou non (select count(*) AS vote from vote WHERE IDJoueur='$IDJoueur' AND IDProposition='$IDProposition')

Cependant, c'est très lourd. Si je veux afficher 20 propositions, ca me fait 21 requêtes.

Je n'est pas encore trouver de solution plus optimales, vous auriez quelque chose a me proposer?


RE: [Optimisation] Système de 'propositions' - Haiken - 06-07-2007

select nom,IDJoueur from Proposition left join vote on Proposition.IDProposition=vote.IdProposition and vote.IDJoueur=$IDJoueur

Si le joueur a voté, le champ IDJoueur vaudra $IDjoueur, sinon il vaudra NULL (à tester avec is_null() par exemple)


RE: [Optimisation] Système de 'propositions' - Amrac - 07-07-2007

Parfait, en effet ça vaut le coup de jeter un oeil sur les jointures Smile

Merci a vous deux :-)


RE: [Optimisation] Système de 'propositions' - NicoMSEvent - 08-07-2007

Il me semble que ceci devrait marcher (vérifie si il ne faut pas des "group by").
Le premier compteur compte le nombre de vote par proposition, le second t'affiche 1 si le joueur $joueur à voté, sinon, il retourne 0. Tiens nous au courant pour voir si ça marche selon tes attentes Smile
Code :
SELECT p.IDproposition,
           count(p.IDjoueur),
           count(v.IDjoueur)
FROM  proposition p
LEFT JOIN vote v ON v.IDproposition=p.IDproposition
LEFT JOIN joueur j ON v.IDjoueur=j.IDjoueur AND $joueur=j.IDjoueur,



RE: [Optimisation] Système de 'propositions' - Amrac - 11-07-2007

Pour avoir le nombre de vote par proposition, j'ai opté pour une technique différente.

Pour chaque proposition, j'ai un champ 'nbVote' que j'incrémente a chaque vote. Ca simplifie un peu.

La solution d'Haiken fonctionne plutot bien Wink