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

PHP & Base de données Discussion :

Prêt à relever un défi de conceptualisation ? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Par défaut Prêt à relever un défi de conceptualisation ?
    Bonjour,

    J’ai besoin de vous pour m'aider à trouver une solution à mon problème de conceptualisation qui est assez complexe ! pour trouver une trame pour ensuite la transcrire en code.

    Donc voici le contexte, Mr A parraine des personnes, qui effectue des achats et chaque achat rapporte un gain à Mr A. Le tout est enregistré dans une table dédiée.

    Autre chose un peu spécifique et compliqué, les personnse que Mr A parraine, parraines eux aussi d'autre personne, et Mr A gagne aussi un gain à chaque achat de ces personne-là.

    Pour résumer Mr A est le parrain de Mr B et gagne 1€ sur chaque achat de Mr B.
    Mr B parraine Mr C et Mr A gagne 0.50€ de chaque achat de Mr C.

    Ensuite dans le profil utilisateur Mr A voit son total de gains et ici aussi il y a une particularité : le montant est le total gagné mais 30 jours avant la date du jour.
    Pour résumer aujourd’hui nous somme le 16 mai il ne voit que les gains obtenu du 16 avril et ultérieurement.

    Donc dans son profil utilisateur il peut grâce à un formulaire choisir le montant qu'il souhaite utiliser pour sa prochaine commande et ainsi réduire le prix de celle ci.

    Et c'est ici que je bloc, je n'ai aucune idée de comment réaliser cette manœuvre, car comme dit plus haut dans son profil l'utilisateur voit un total qui est issue de plusieurs enregistrement dans la table.

    J'ai bien entendu pensé à faire un UPDATE mais je ne vois pas trop comment faire ici.

    Exemple sur un enregistrement de la table le gain est de 10€, et sur un autre enregistrement il est de 15 €, et Mr A choisi d'utiliser parmi sa somme total 20€ il doit donc lui rester 5 € au final mais comment soustraire
    C’est 20 euros parmi les 2 enregistrements de la table ?

    Avez vous une idée ?



    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il te suffit d'avoir une table en plus avec les dépenses.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonsoir,

    Soit comme dis par sabotage une table avec les dépense, soit les inclure directement dans la table que tu nous montre. L'avantage c'est que tu fait le calcul avec un SUM() tout simplement (pour cela il faut insérer en nombre négatif !).

    Mais je ferais par contre une table supplémentaire :

    Solde_Gain(id, id_user, soldes)

    Une routine qui recalcule tout les jours vers 0h le soldes sur days - 30 des utilisateurs de façon à éviter des calculs supplémentaire lors de l'affichage du soldes de chaque utilisateur.
    En effet sur un site de vente en ligne on espère en général avoir un trafic assez important, donc si on peux soulager de quelques opérations c'est toujours mieux.

    Par contre comment gère tu l'utilisation de son gain ?
    Tu actualise immédiatement son montant ou tu attends le lendemain ?

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Par défaut
    donc vous proposez de créer une table qui contient la somme total des gains d'une personne et c'est celle la avec la quelle je travail par la suite. Je comprends.

    Tu parle de routine, c'est genre tâche cron? si on admets que l’hébergeur ne permet pas de faire cela, comment faire une routine sql autrement ?

    Actuellement je procède ainsi, la personne paye, une fois le paiement validé, cela s'enregistre dans une première table "orders" puis je calcule en php le % de gain suivant le montant payé de la commande puis cela s'enregistre dans cette table gains (en photo plus haut).
    Et donc si je vous suis je devrait faire le calcul de la somme de tous les gains puis de faire une autre requête pour faire un insert / update et enregistrer le tout dans une troisième table ?

    Je pense que le tout ferais dans les 4 requêtes facile car j'en ai déjà 2. avec des conditions si la personne a déjà un total de gain on fait un update et sil elle en a pas un insert ?

    C'est pas un peu lourd ?

    merci pour vos conseils en tout cas! ça me fait réfléchir

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Par défaut
    je viens juste de comprendre votre conseil

    donc je créer une autre table dépense, ca me fait donc une table gain et dépense et après je comprend q"on peut afficher combien il reste mais ce résultat n'est pas enregistré . il faudrait prévoir un champ spécial dans la table dépense pour enregistrer le montant total qu'il reste ?

  6. #6
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    (Mal)heureusement en informatique on a souvent la possibilité de faire une chose de diverse façon, chacune apportant sont lots d'avantage et d’inconvénient.

    Citation Envoyé par thecatz
    Tu parle de routine, c'est genre tâche cron? si on admets que l’hébergeur ne permet pas de faire cela, comment faire une routine sql autrement ?
    En fait quand je dis routine c'est plutôt en terme généraliste pour dire que c'est une tâche qui doit s'effectuer tout les jours. Que ce soit pas un cron (c'est vrai que c'est plus propre), un démon, un service, un scipt, ...

    Par contre en examinant ta table quelque chose vient de m’apparaître, qu'est-ce que la colonne "bon d'achat", est-ce qu'il s'agit de la réduction appliqué à la facture ?
    Dans ce cas tu as déjà ta solution sous les yeux

    Citation Envoyé par thecatz
    Actuellement je procède ainsi, la personne paye, une fois le paiement validé, cela s'enregistre dans une première table "orders" puis je calcule en php le % de gain suivant le montant payé de la commande puis cela s'enregistre dans cette table gains (en photo plus haut).
    Et donc si je vous suis je devrait faire le calcul de la somme de tous les gains puis de faire une autre requête pour faire un insert / update et enregistrer le tout dans une troisième table ?

    Je pense que le tout ferais dans les 4 requêtes facile car j'en ai déjà 2. avec des conditions si la personne a déjà un total de gain on fait un update et sil elle en a pas un insert ?

    C'est pas un peu lourd ?
    C'est pour ça que je te parlais de routine, si tu commence à avoir pas mal de visite il va falloir optimiser tes requêtes pour utiliser le moins possible de bande passante et avoir une navigation fluide. Sinon les utilisateurs iront voir ailleurs.
    Du coup puisque tu affiche le solde de compte d'une personne à J-30 cela me parait intéressant dans ton cas d'effectuer les calcul de gain tout les jours à heure plus ou moins fixe.
    Pour l'utilisation d'une troisième table c'est discutable, je pense qu'au début ce ne sera pas un gain; entre un SELECT SUM(SUM(gain) - SUM(bonachat)) FROM table2 et un SELECT gain FROM table3 ce dois pas être énorme avec une centaine d'enregistrement.
    Par contre vu que tu dois prendre en compte le filleul et le sous-filleul sa va commencer à te faire de la ligne, surtout que l'on doit pouvoir avoir plusieurs filleul ?
    C'est dans ce cas que j'utiliserai une troisième table pour stocker les gains.

    Pour la question de l'insert / update je la résoudrai ainsi :
    A la création du compte on insert la ligne de l'utilisateur dans la table3 avec un gain = 0. Ainsi tu est sur de ne faire que des updates.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 21
    Dernier message: 23/01/2013, 12h50
  2. Quels défis IT devront relever les entreprises en 2011 ?
    Par Idelways dans le forum Actualités
    Réponses: 0
    Dernier message: 14/01/2011, 14h15
  3. Y-a t-il plusieurs algorithmes de calcul de l'amortissement d'un prêt?
    Par kouka dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 12/09/2007, 13h33
  4. Défis à relever
    Par jerem_psg dans le forum C++
    Réponses: 6
    Dernier message: 31/01/2006, 00h00

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