IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Probleme d'organisation de table


Sujet :

Langage PHP

  1. #1
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut Probleme d'organisation de table
    Bonjours,

    J'ai fait un système de vote.

    La table sondage_vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | site | images | code | reward
    Cette table me sert juste pour l'affichage, elle affiche, une petite images, sur laquelle on peut cliquer.
    Pour la maintenance c'est biens simple, j'ai juste a rajouter une image, un lien et le nouveau vote se rajoute sur le site.
    Je me sert d'une boucle while pour afficher.

    Ma deuxième table vote :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | pseudo | pseudo | point | vote1 | vote1_time | vote2 |vote2_time
    Cette table me sert a comptabiliser les points, et aussi laisser un délaie de 2h entre chaque vote.
    Si le membre a voter il y a moins de 2H, je n'affiche pas le bouton de vote.

    Alors voila mes problèmes, que vous avez du remarquer :
    - Pour ajouter un vote, je suis obligé d’éditer les 2 tables
    - Quand je veux afficher ou pas le bouton de vote en fonction du temps, je ne vois pas de solution.

    Je pense que l'organisation des tables n'est pas correct.
    Pourriez vous m'aidez a créer un système simple ?

    Merci

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Personnellement je verrais bien un truc du genre pour ta deuxieme table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | id_vue | pseudo | vote | last_vote
    _ vote est le nombre de point attribuer par la personne au vote.
    _ id_vue est l'id du vote pour faire la liaison entre les deux tables.
    _ last_vote est l'heure a laquelle le vote a été effectué.

    pour savoir si le vote a été fait il y a moins de 2h, tu fais un datediff entre le temps courant et le last_vote .

  3. #3
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Merci de ta reponse.

    Mais ta reponse ne me convient pas vraiement.

    Que fais tu des autres votes ?
    vote1 | vote2 ???

    Pour la liaison je préfère faire une jointure c'est plus propre, mais avec ma table impossible.

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Chaque utilisateur peut faire un nombre de vote limité? ou illimité?

    La jointure se fait justement avec l'id comme tu as une relation 1-n

  5. #5
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    En effet la jointure ici semble possible, mais si tu regarde plus en detail c'est impossible.

    Pour les votes c'est illimité, sauf 1 toutes 2 heures.

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    J'ai pas du bien comprendre alors

    En gros tu as une table qui regroupe toutes les votes en cour (donc les sujets sur lesquels voter)

    Et une autre qui stocke les votes c'est ça?

  7. #7
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    La table vote_site ne me sert que pour l'affichage.
    J'affiche dans un tableau toutes les images, avec une lien de redirection.
    Un fois cliqué sur l'image sa redirige vers ... vote.php qui va ajouter le vote, puis redirigé vers le partenaire.

    La table vote, elle comptabilise les votes.
    Dans :
    - vote1 : On met 1 ou 0 pour dire que c'est voté
    - vote1_time... One met le temps du vote + 2 heures. (pour vierifer si on peut voter.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    C'est déjà beaucoup plus clair. Mais c'est quoi ton souci exactement ?

  9. #9
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Mon souci, viens de la longteur de la maintenance.

    Imagniez pour ajouter un nouveau vote, je dois ajouter les info dans vote_site.
    Jusqu'a la pas de probleme.

    Mais je dois aussi rajouter des info dans : vote_site
    ... | ... | vote2 | vote2_time.
    C'est deja mois pratique.

    Ensuite pour afficher ou ne pas afficher le bouton de vote, je ne peux pas le faire.
    Pour l'instant j'affiche tous le temps le bouton de vote.

    Donc mon probleme c'est au niveau de l'organisation des tables.

    Dois je supprimer une table, la modifier, ou en rajouter une ?

  10. #10
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    C'est pour sa que je t'ai expliquer une autre manière de voir les chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | site | images | code | reward
    Qui va DEFINIR les votes en cour (cad les différents endroit ou le gugus peut voter)

    Ensuite pour chaque vote, une table repertori les votes des gugus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | id_vue | pseudo | vote | last_vote
    Je te donne un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    La table vote:
    1 | www.toto.fr | images | code | reward
     
    La table vote_user:
    1 | 1 | toto | 1 | heure
    2 | 1 | titi   | 0 | heure
    Ce qui fait que 2 utilisateur ont voter pour toto.fr.
    Le résultat du vote est donc 1/2.

    Ensuite tu rajoute un enregiostrement dans ta table vote et pof tu as un nouveau vote disponible

  11. #11
    Membre actif Avatar de Retrokiller069
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 217
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par thebarbarius Voir le message
    Ma deuxième table vote :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id | pseudo | pseudo | point | vote1 | vote1_time | vote2 |vote2_time
    Bonjour,

    bon je comprends rien à cette table. Pourquoi y a t il 2 fois pseudo? 2 fois vote?
    Si tu veux garder un historique des votes pourquoi tu ne fais pas une table historique de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id | pseudo | vote | date/heure | id_site | vue
    ainsi ca te permet de connaitre quand il a voté pour la dernière fois (en comparant la date actuelle et la date de son dernier vote). Je pense aussi qu'en mettant vue, cela permet de savoir s'il l'a vu et si par hasard il vote tu fait un update.

    Si ca réponds pas à ta question désolé mais j'ai vraiment rien compris...

    Entièrement d'accord avec skeud

  12. #12
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    id | pseudo | pseudo | point | vote1 | vote1_time | vote2 |vote2_time
    merci j'avais pas vue en effet il y a une erreur

    Sa donne sa plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id | pseudo| point | vote1 | vote1_time | vote2 |vote2_time
    En faite, il y aura x fois votex_time selon le nombre de vote dans la table vote_site.

  13. #13
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut


    J'arrete pas de t'expliquer que ça ne sert a rien, les enregistrement ne sont pas unique par utilisateur mais multiple, ce qui est unique c'est le vote pour un site, un utilisateur aura qu'un seul enregistrement pour un id_vote.

    EDIT: un exemple de table complete pour toi pour que tu comprenne:

    vote:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 | www.toto.fr | images | code | reward
    2 | www.google.fr | images | code | reward
    3 | www.tata.fr | images | code | reward
    vote_utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1 | 1 | toto | 1 | heure
    2 | 2 | toto | 0 | heure
    3 | 3 | toto | 1 | heure
    4 | 1 | tata | 0 | heure
    5 | 2 | tata | 0 | heure
    6 | 3 | tata | 1 | heure
    Ce qui donne:
    www.toto.fr: 1/2
    www.google.fr: 0/2
    www.tata.fr: 2/2

    Et donc pas besoin de mettre le votex et voteX_time

  14. #14
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    skeud, cette technique je l'ai utilisé, sauf que mon sql saturé.
    Le temps d'affichage de la page quand il y avait un fort trafique était interminable.



    A la limite je prefere faire sous 3 tables avec des liaisons.

    table vote_site
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id | site | image | url | reward
    table vote_point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id | pseudo | point
    table vote_time
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id_point | id_site | time
    Je trouve mieux deja.
    Sauf un point noir, je vais etre obligé de creer une ligne par vote, ce qui me plait pas vraiment.

    Sur mon site actelle j'ai plusieurs milliers de client, je risque de saturer la DB si j'arrive a 1 000 000 000 de client.

    Après pour ce qui est de la supression des vote perimé, je vais devoir verifier a chaque fois qu'un client actualise une page...
    Pas très optimisé, je pense .
    Mais niveau organisation des tables je prefere.

    Auriez vous une idée pour une meilleur optimisation ?

  15. #15
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    euh meme avec des milliers de client sa devrait fonctionner, c'est pas un traitement lourd, le probleme vient plus de ton code je pense que du nombre de donnee.
    Perso je travail sur un site de gestion avec pres de 10000 devis et des traitement de calcul derriere tout sa, donc plutot lourd et le temps de calculer une moyenne en liaison avec d'autre donnee, sa me prend a peine 30 seconde, donc pour juste une histoire de vote, sa passe sans souci.

  16. #16
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Je ne parle pas de millier, mais de dizaine de milliers.

    On va rester sur tes 30s, regarde imagine 30 seconde pour afficher une page... sachant qu'on navigue sur un site donc on visite 3 a 4 pages minum... ce qui ferait un temps d'attente total de 2 minutes, pour lire 4 pages...

    Mes clients sa les feraient fuir, et je les comprends j'en ferai de meme.

    Donc revenons a la question de base.
    Comment optimiser tous sa ?

  17. #17
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Beh justement, je te dis que ça ne devrait pas poser de problème avec une organisation de table de cette manière.
    Ensuite si ça prend du temps c'est du coter php que tu n'optimise pas, pas du coter sql

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Citation Envoyé par skeud Voir le message
    Beh justement, je te dis que ça ne devrait pas poser de problème avec une organisation de table de cette manière.
    Ensuite si ça prend du temps c'est du coter php que tu n'optimise pas, pas du coter sql
    ou du coté sql si tu n’indexe pas correctement tes tables.. mais sinon oui en principe pas de soucis :!

Discussions similaires

  1. probleme pour interroger 3 tables
    Par jexl dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/03/2006, 13h13
  2. [POSTGRESQL - C#] Probleme d'accès à une table
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/12/2005, 13h33
  3. Réponses: 5
    Dernier message: 12/12/2005, 18h30
  4. access2000, probleme creation relations de tables
    Par nono_60 dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2005, 22h50
  5. probleme de creation de table
    Par donny dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 30/05/2005, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo