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 SQL Discussion :

Points sur classement (ORDER BY)


Sujet :

Langage SQL

  1. #1
    maf
    maf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 76
    Points : 43
    Points
    43
    Par défaut Points sur classement (ORDER BY)
    Bonjour à tous,

    Je vous expose mon problème :

    Dans une table MySQL, j'ai une colonne : Nom et d'autres : Scores (pour plusieurs jeux différents) (score1, score2, score3, ...)

    J'arrive à faire une requête SQL pour afficher le classement pour chaque jeu (pas de problème avec Order by sur score1 etc ...)

    Maintenant, je que j'aimerais pouvoir faire, c'est que les joueurs reçoivent des points en fonction de leurs classement comme suit :

    1er score1 : Nombre de points = Nombre de joueur (COUNT NOM)
    2ème score 1 : Nombre de points = Nombre de points 1er score1 - 1
    etc ...

    idem pour les autres scores et après établir un classement général sur le nombre de points.

    Merci bien à vous de m'indiquer comment faire cela le plus facilement possible

  2. #2
    Membre actif
    Avatar de Hatchepsout
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 222
    Points
    222
    Par défaut
    salut

    46 affichage et 0 réponse

    après la lecture de poste j'ai bien compris pourquoi

    1- honnêtement j'arrive plus a comprendre ton problème
    2- si t'essaye de nous expliquer un peu plus la soucis ça serai génial

    par exemple
    - tu mis un bout de code (ta requête par exemple)
    -montre moi la structure de ta table .
    -et repose mieux ta question

    on peut mieux t'aider , je t'assure


    bonne chance

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    De ce que je crois comprendre, vous voulez executer une fonction d'agrégation dans une requête UPDATE ou INSERT.

    Donc, pour ajouter les points au champ Score1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE NomDeLaTable 
    SET Score1 = Score1 + (SELECT Count(NOM) FROM NomDeLaTable) 
    WHERE Joueur = XXXX
    Par contre, si Score1 = Jeu1, Score2 = Jeu2, etc, comme mentionné dans votre problème, cette modélisation est inexacte ...

    Veuillez s'il vous plaît nous indiquer la structure de vos tables car celle-ci me semble confuse et erronée.

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Citation Envoyé par Hatchepsout Voir le message
    après la lecture de poste j'ai bien compris pourquoi
    Je dirais plutôt que personne n'a répondu parce que c'est chiant à faire, et parce qu'on est encore en train de digérer les fêtes de fin d'année

    Maf, comme tu le mentionnes, ton truc nécessitera forcément de faire un tri par jeu.
    En plus, MySQL n'a pas de fonctions analytiques... donc c'est forcément la fête (pour les classements, ça donne toujours des jointures pas efficaces)

    Est-ce que tu peux utiliser une table temporaire avec autoincrément ?

    Table temporaire :
    IdTemp : entier autoincrémenté
    NumJeu : ce qui permettra d'identifier le classement
    Joueur : euh, le joueur
    Classement : le classement du joueur pour le jeu.

    Ensuite, tu fais les insert dans cette table pour chaque jeu, avec l'order by qui va bien.

    Hmmm, tu pourrais faire ton calcul de points avec un petit GROUP BY.
    Mais deux petits problèmes :
    - l'entier autoincrémenté ne recommence pas à 1 pour chaque classement
    => Il faudra retrancher pour chaque ligne l'IdTemp minimum pour le jeu
    - le nombre de points, c'est juste "l'opposé" du classement.
    => Le nombre de points est donc (Nombre de joueurs - Classement + 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT joueur, sum(cnt - classement + 1) - minid + 1
    FROM  
    (SELECT NumJeu, min(IdTemp) AS minid, count(*) AS cnt
    FROM TmpTable
    GROUP BY NumJeu) t1
    JOIN TmpTable t2 ON t1.NumJeu = t2.NumJeu
    GROUP BY t2.joueur

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/02/2005, 18h04
  2. identifier un point sur l'ecran
    Par alionel dans le forum MFC
    Réponses: 2
    Dernier message: 25/02/2005, 16h12
  3. calcul d'un point sur la base d'un cone
    Par Admin dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 18/11/2003, 21h18

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