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

Requêtes MySQL Discussion :

[aide requete] 10 meilleurs score du meilleur joueur


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut [aide requete] 10 meilleurs score du meilleur joueur
    Bonjour,


    Je dois , pour un jeu en ligne, trouver le score du meilleur joueur, sachant que ce score est calculé en faisant le cumul des 10 meilleurs scores effectué par ce meme joueur

    j ai cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT users.id, users.last_name1, (
     
    SELECT SUM( scores.score )
    FROM scores
    WHERE scores.user_id = users.id
    ORDER BY scores.score DESC
    LIMIT 0 , 10
    ) AS total, user_id
    FROM users
    INNER JOIN scores ON scores.user_id = users.id
    GROUP BY users.id
    ORDER BY total DESC
    LIMIT 0 , 1
    le probleme est que le LIMIT 0,10 est appliqué en SUM , donc on a en fait le total des scores effectué par le joueur en tout (pas de limite a 10) , ce qui est faux

    j ai bien essayé de faire une sous requete, mais il bloque sur la clause WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT users.id, users.last_name1, (
     
    SELECT SUM( scores.score )
    FROM (SELECT score FROM scores
    WHERE scores.user_id = users.id
    ORDER BY scores.score DESC
    LIMIT 0 , 10) AS z
    ) AS total, user_id
    FROM users
    INNER JOIN scores ON scores.user_id = users.id
    GROUP BY users.id
    ORDER BY total DESC
    LIMIT 0 , 1
    #1054 - Unknown column 'users.id' in 'where clause'
    une idée de comment s en sortir sans passer par un précalcul des 10 meilleurs scores de chaque joueur ?

    Merci d'avance !


    A noter que j arrive bien a avoir le total pour un user précis , comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(score ) AS total FROM (SELECT score FROM scores WHERE user_id=284 ORDER BY score DESC LIMIT 0,10) as sub_score
    mais des que je veux faire une requete globale pour tous les users je galere..

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    une piste bien crade (mais pas trop le choix) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select user_id, sum(score) as sum_score
    from (
    select user_id, score, (select count(*) 
     from tb1 b 
     where a.user_id = b.user_id and a.score < b.score) + 1 as rnk 
    from tb1 a ) as tmp
    where rnk < 11
    group by user_id
    order by sum_score desc
    limit 1

  3. #3
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    j ai finalement opté pour une methode de précalcul au postage du score.. mais je suis intéressé par savoir si une telle demande est traitable en une seule requete

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Si vous n'en dites pas plus sur ce que vous mettez en place, ca va être difficile de répondre.

  5. #5
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    désolé si ca n est pas clair , je reprends:

    Contexte:

    Jeu en ligne

    Tables :

    users : info de l utilisateur
    scores : avec clé étrangère user_id et score (int)

    Mission:

    Le joueur peut jouer 3 parties par jour durant le jeu, le gagnant du jeu (concours) est celui qui a eu le meilleur score en prenant en compte le score des 10 meilleurs parties faite par chaque joueur sur la période.


    probleme

    la requete posté dans le premier message ne limit pas au 10 meilleurs score du joueur. elle fait la somme de la totalité des parties joué pour un utilisateur donné. ce n est pas ce que l on veut.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    et la requête que j'ai posté ? Y a une erreur ? le résultat n'est pas bon ?


    Concernant les info sup c'était plus pour votre dernier poste stipulant que vous souhaitiez faire du "précalcule" => ok mais : quand, comment, sur quelles données ?

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Peut-être en se basant sur l'exemple présenté ici : http://mysql.developpez.com/telechar...aque-categorie
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2011, 13h43
  2. Trouver les meilleurs scores de chaque joueur
    Par nycolas dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/08/2009, 06h09
  3. Aide pour une formule complexe ou meilleure idée
    Par manutalontsi dans le forum Excel
    Réponses: 3
    Dernier message: 21/01/2009, 14h14
  4. extraction meilleurs scores
    Par marcGR dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2008, 13h23
  5. Algorithme permettant de garder les meilleurs score
    Par mhtrinh dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/12/2007, 16h54

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