Forum Programmation.web Construire un tableau de référence ?

Posté par  . Licence CC By‑SA.
Étiquettes :
1
15
mai
2019

Bonjour,

je poursuis le développement d'un plugin galette dont je parlais ici il y a peu.

J'ai besoin de vos lumières pour réaliser un petit truc pas très complique: un challenge vitesse.
Le principe est simple, en fonction d'un temps réalisée, un athlète se voit attribuer un nombre de points par rapport a un temps de référence (de 0 à 10points).

Là où cela se complique, c'est que bien évidemment, d'autres critères entre en jeu: la catégorie de l’athlète (un bonus est attribué en fonction de l'âge), le sexe (la référence varie d'un sexe à l'autre) et la distance.

Actuellement, une allure « étalon » est utilisée:
- 4'20/km pour les femmes (soient 260 secondes)
- 3'30/km pour les hommes (soient 210 secondes)

À partir de là sont déclinés des matrices pour réaliser le calcul final selon un la méthode suivante:

SI Dist_en_km > 10 ALORS 
  Temps_pour_10pts = temps_etalon + (Dist_enkm-10)*(Dist_enkm-10)
SINON
  Temps_pour_10pts = temps_etalon - (Dist_enkm-10)*(Dist_enkm-10)

Ensuite, cette valeur permet de construire le Temps_pour_avoir_9pts qui lui-même permet d'avoir celui pour 8, etc.

En gros:

temps_pour_9pts = temps_pour_10pts * 1,03
temps_pour_8pts = temps_pour_9pts * 1,03
temps_pour_7pts = temps_pour_8pts * 1,03
.
.
.
Pour attribuer les points, il suffit alors de comparer le temps de l'athlète et de faire une somme.

Pour couper court aux questions sur les valeurs choisies, disons que c'est ainsi.

Ce que je cherche à faire, c'est construire un tableau de référence pour ne pas avoir à la calculer à chaque fois.

Comment vous y prendriez-vous sachant que je suis sur du PHP + MySQL ?
Actuellement, tout est fait en PHP mais je sens qu'une bonne partie pourrait être mise dans une table MySQL.

Votre avis ?

  • # reponse dans ta question

    Posté par  . Évalué à 2. Dernière modification le 15 mai 2019 à 07:27.

    Ce que je cherche à faire, c'est construire un tableau de référence pour ne pas avoir à la calculer à chaque fois.

    Comment vous y prendriez-vous sachant que je suis sur du PHP + MySQL ?
    Actuellement, tout est fait en PHP mais je sens qu'une bonne partie pourrait être mise dans une table MySQL.

    tu peux donc faire, au choix du concepteur,
    une table par categorie scoring_home, scoring_femme
    que tu remplis avec tes valeurs calculées

    et ta requete va allors chercher le resultat dans la table en fonction de la categorie

    soit tu fait une table scoring, dans laquelle tu mets tous, avec un colonne "categorie"
    pour avoir tes criteres homme/femme/enfants <10ans/enfants 10 à 15/ ados /veteran/

  • # pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

    Posté par  . Évalué à 1.

    Dans ton cas le plus simple est de créer une fonction dans mysql qui fait le calcul à laquelle tu peux passer le temps de référence et l'argument de ditance en argument.

    Là où cela se complique, c'est que bien évidemment, d'autres critères entre en jeu: la catégorie de l’athlète (un bonus est attribué en fonction de l'âge), le sexe (la référence varie d'un sexe à l'autre) et la distance.

    Actuellement, une allure « étalon » est utilisée:
    - 4'20/km pour les femmes (soient 260 secondes)
    - 3'30/km pour les hommes (soient 210 secondes)

    Pour les paramètres tu peux les rentrer dans une table.

    comme ça pour faire ton calcul tu n'auras qu'a appeler la fonction.

    et tu pourras construire une vue bdd qui te donneras tes résultats actualisés. un simple select en php te permettra ensuite d'afficher les résultats.

    l'avantage de cette solution c'est que c'est le moteur BDD qui travaille et ça sera rapide facilement paramétrable.

    tu peux retrouver les éléments pour créer les fonctions dans le manuel de mysql.

    manuel mysql

    • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

      Posté par  . Évalué à 1.

      Ta solution est intéressante.

      Pour les paramètres tu peux les rentrer dans une table.

      De quoi parles-tu exactement ? Des valeurs étalons ou de l'ensemble des valeurs ? -i.e temps_9pts, etc. ?

      L’idée d'une fonction m'a traversé l'esprit et d'une vue. C'est ce que je fais pour un autre challenge (challenge distance) que je construis de cette manière. Afficher le résultat du challenge ne revient qu'a un simple select dans PHP.

      • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

        Posté par  . Évalué à 1.

        Je parlais des paramètres de la fonction car la notion : Tout ce qui ne varie pas.

        Mais ça peut aussi vouloir dire un jeu de données étalon utilisé comme référentiel de comparaison.

        mais pour ce type de donnée je ferai une table spécifique.

        • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

          Posté par  . Évalué à 1.

          Je dois être un peu dur de la comprenite. Peux-tu me faire ca en pseudo-code avec un exemple ?

          • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

            Posté par  . Évalué à 1.

            Je dois être un peu dur de la comprenite. Peux-tu me faire ca en pseudo-code avec un exemple ?

            non je ne crois pas mais, il faudrait pour cela avoir une description complète de ton besoin avec formule de calcul car pour le moment je n'ai pas assez d'éléments pour te donner une piste précise.

            Pour attribuer les points, il suffit alors de comparer le temps de l'athlète et de faire une somme.

            notamment pour ce point

            • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

              Posté par  . Évalué à 1. Dernière modification le 17 mai 2019 à 13:51.

              Je pense que la description que j'ai faite est assez précise.

              Une allure (F ou M) qui sert de "constante" pour construire une table de temps (en secondes). Pour avoir le max de point (10), il faut avoir un temps ≤ à la ref. Le temps pour avoir 9 points est construit sur la base du calcul du "temps pour 10 points" * 1,03 etc.

              Une fois qu'on a cela, le challenge pour un athlète sur une année sportive c'est la somme des points qu'il a accumulé.

              • [^] # Re: pourquoi ne pas créer une fonction Mysql qui fait ce calcul?

                Posté par  . Évalué à 1.

                Je pense que la description que j'ai faite est assez précise.

                oui pour toi qui baigne dans le sujet

                Une allure (F ou M) qui sert de "constante"

                Qu'est ce qu'une allure ça se représente comment ?

                c'est un un entier un nombre décimal, un réel.
                cela représente quelle type de grandeur une vitesse une durée et dans quelle unité s'exprime cette constante.

                construire une table de temps (en secondes).

                Quelle formule dois-je utiliser pour construire cette table de temps en seconde.

                Pour avoir le max de point (10), il faut avoir un temps ≤ à la ref. Le temps pour avoir 9 points est construit sur la base du calcul du "temps pour 10 points" * 1,03 etc.

                ici c'est clair je prends un temps dans le tableau de références et tu compares au temps de la personne et en fonction du ratio de temps il est classé dans une des 10 notes.

                Question : si le temps de la personne ne rentre pas dans le tableau par exemple inférieur à la note 0?.

                que dois-je faire. Claquer une exception pour signifier hors catégorie ou le mettre dans la case 0 ?

                Une fois qu'on a cela, le challenge pour un athlète sur une année sportive c'est la somme des points qu'il a accumulé.

                Quels points faut-il cumuler ?

                donc il faut faire le calcul à partir de quels résultats enregistrés.

                Je suis un peu tatillon mais il faut toutes ces réponses pour créer

                une réponse cohérente à ton problème.

                Je pense qu'en y répondant ça te donnera une image plus claire également.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.