|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
Bonjour
Je me pose la question comment mettre en place un système de vote. En gros j'aimerais qu'une personne puisse "voter" pour quelque chose (peu importe, on peut réduire le problème a un seul type de données, avec juste un index/clé). Je pense à un système simple comme "J'aime/J'aime pas". J'aimerais qu'une personne ne puisse voter qu'une fois. Donc en gros je me dis que je vais faire une table "vote" et mettre dedans tous les votes des utilisateurs (clé user, clé élément voté, aime/aime pas). Dans mes premiers essais avec PostGreSql, sur chaque client de mon jeu, je refaisais sans cesse les requêtes pour calculer les classements. Mais certaines personnes m'ont indiqué que c'était lent chez eux. Donc pour un système de vote, j'imagine qu'il n'est pas conseillé de calculer sans cesse la somme de tous les votes d'un item pour faire des classements. Il est peut-être mieux de stocker quelque part le résultat. Existe-il un système pour que ce soit la base de données qui mette à jour les totaux quand il y a un vote qui est ajouté ? (est-ce ça les "triggers" ?) Pour qu'un utilisateur ne vote pas deux fois, il faut que je vérifie si il a déjà voté pour tel ou tel élément et proposer le choix "J'aime" ou "J'aime pas" en fonction. Cela fait pas mal de recherche dans une grosse table. Ne vaut-il pas mieux créer une table de vote pour chaque élément ? (j'ai beaucoup d'utilisateurs et beaucoup d’éléments). Ça fera plein de tables, mais peut-être est-ce mieux pour les recherches ? Pas vraiment une question, mais plutôt une réflexion à voix haute. Vos commentaires sont les bienvenus (je suis toujours un gros débutant, n’hésitez pas à m’éclairer sur des mécanismes qui m'auraient échappé). Le dev blog de mon jeu: http://blog.raggededge-online.com/ |
|
|
00
|
|
|
#2 | ||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 175 ![]() |
Moi je le vois en 3 tables dont une que vous devez déjà posséder c'est celle de vos utilisateurs/client/participant ou je ne sais comment vous la nommez.
user : id-user int nom varchar prenom varchar ........ sondage id-sondage int id-user int id-resultat-sondage vote int(1) (1 ou 0 ) resultat-sondage id-resultat-sondage int nom-sondage varchar positif int negatif int Quand un user vote dans un sondage (quelconque) on l'indique dans la table sondage et un incrémente la table resultat-sondage Code :
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
Merci.
Le conseil c'est donc d'utiliser une seule table pour stocker tous les votes. ![]() Et pour qu'un utilisateur ne vote pas deux fois, rechercher dans cette table. |
|
|
00
|
|
|
#4 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 175 ![]() |
Dans la table resultat-sondage
ligne par sondage Et dans la table sondage tu mets tout les sondages où un user a voté
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
Dans mon cas, je ne pense pas avoir besoin de créer de sondages, puisque en gros, les utilisateurs pourront "voter" pour n'importe quel élément.
Par exemple, Circuits de 1 a 100 ou Vaisseau de 1 à 10. La table vote serait donc: Christophe, Circuit 45, J'aime Laurent, Vaisseau 8, J'aime pas Christophe, Circuit 41, J'aime .... A moins que je n'ai pas compris l’intérêt de créer des "sondages" ici ? |
|
|
00
|
|
|
#6 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 175 ![]() |
Oui, mais tu te plains de lenteur.
Et tu nous proposes une base de données mal modélisé et non normalisé Je te conseil les lectures suivantes : http://laurent-audibert.developpez.c...urs-BD015.html http://sgbd.developpez.com/actu/3450...es-par-SQLpro/ Et surtout celui-ci
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
Merci pour la réponse.
Je ne me plains de rien. J'essaie juste de faire comprendre ce dont j'ai besoin. Ma remarque était la juste pour être sûr que j'ai bien été clair. Je suis là justement pour comprendre comment implémenter. Si tu as bien compris mon problème alors très bien. Merci pour les lectures, je vais aller voir cela.
|
|
|
00
|
|
|
#8 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 175 ![]() |
Sorry ai confondu de post
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
Je ne connaissais pas le principe de normalisation.
Je vais prendre le temps de lire et de comprendre tout cela (très bien le dernier lien, merci) |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Concepteur Jeux Vidéos Inscription : avril 2011 Messages : 12 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com