Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/08/2011, 16h44   #1
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
Par défaut Système de vote

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/
Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 08h39   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 175
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 175
Points : 6 462
Points : 6 462
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 :
1
2
3
4
5
6
 
UPDATE resultat-sondage SET posistif = positif +1 WHERE id-resultat-sondage = (id du sondage) ;
 
ou
 
UPDATE resultat-sondage SET négatif = negatif +1 WHERE id-resultat-sondage = (id du sondage) ;
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 10h23   #3
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
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.
Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 10h34   #4
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 175
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 175
Points : 6 462
Points : 6 462
Dans la table resultat-sondage

ligne par sondage


Et dans la table sondage

tu mets tout les sondages où un user a voté
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 11h13   #5
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
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 ?
Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 12h35   #6
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 175
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 175
Points : 6 462
Points : 6 462
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
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h35   #7
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
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.

Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 11h40   #8
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 175
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 175
Points : 6 462
Points : 6 462
Citation:
Envoyé par Christophe78180 Voir le message
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 sur que j'ai bien été clair.


Sorry ai confondu de post
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h20   #9
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
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)
Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 12h48   #10
Invité de passage
 
Homme
Concepteur Jeux Vidéos
Inscription : avril 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Concepteur Jeux Vidéos
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 12
Points : 1
Points : 1
Citation:
Envoyé par MaitrePylos Voir le message
Sorry ai confondu de post
Ok pas de soucis
Christophe78180 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h12.


 
 
 
 
Partenaires

Hébergement Web