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 :

Amélioration requête SQL


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut Amélioration requête SQL
    Bonjour tout le monde,

    j'ai un petit soucis de requête SQL,

    j'ai une table de membres que je mets à jours régulièrement afin de créer un graphique d'évolution...
    -----------------------
    pseudo | points | date
    -----------------------
    juju | 1200 | 13/06/07
    juju | 1100 | 12/06/07
    juju | 1000 | 11/06/07
    popo| 1150 | 13/06/07
    popo| 1150 | 12/06/07
    popo| 1100 | 11/06/07
    mat | 950 | 13/06/07
    mat | 900 | 12/06/07

    voila un jeu d'essai représentatif de ma table, certains membres partent, d'autres arrivent en cours de route...
    pour faire mon graphique, il me faut tous les membres entre deux date et classé par ordre de points décroissant

    ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct(pseudo) 
    from stat_membre 
    where date between dateMin and dateMax 
    order by points
    son résultat:
    1, popo
    2, juju
    3, mat

    ma requête se base sur la dateMin et non pas sur la dateMax,
    ce que j'attends c'est d'avoir les membres classé par ordre décroissant en fonction de leur points et de la date la plus récente enregistrée!
    afin d'obtenir : juju, popo, mat

    En plus ma requête n'est pas très belle car le champ points n'est pas dans le select alors que je l'utilise dans le order by^^

    Merci d'avance
    J'espère avoir été assez clair...

    Enjoy @+

  2. #2
    jnore
    Invité(e)
    Par défaut
    salut

    essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    select pseudo
    FROM stat_membre 
    GROUP BY pseudo
    ORDER BY max(date) DESC,max(points) DESC
    Fais-nous un retour

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut
    merci jnore,
    ca marche a moitié :
    tout ceux qui ne sont plus mis a jour sont a la fin,
    parcontre, le filtre sur les points se fait sur les points de la date min et non de la date max...

  4. #4
    jnore
    Invité(e)
    Par défaut
    On va y arriver....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    SELECT pseudo
    FROM stat_membre 
    WHERE date IN
           (
             SELECT max(date)
             FROM stat_membre 
             )
    ORDER BY points DESC

    Le tout maintenant est de savoir si tu peux avoir plusieurs membres avec des points par jour !!
    Parceque là il faudra reconstruire une requete.
    Merci de nous dire.
    Dernière modification par jnore ; 16/06/2007 à 11h53.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut
    Arf, désolé, cette requête retourne le meme résultat!
    le bug apparait lorsqu'un joueur progresse plus vite qu'un autre et le dépasse

    si tu veux voir le résultat :
    http://nounours.juju21.free.fr/oGame...atistiques.php
    tu as juste a appuyer sur 'OK'

    Pour répondre a ta question :
    je mets à jour environ 40 joueurs par jour avec leurs points et la date du jour.

  6. #6
    jnore
    Invité(e)
    Par défaut
    Ce que j'ai écrit comme dernière requete m'a l'air correct.
    Je filtre sur la dernière date ta table et j'y applique un order décroissant sur le nbre de points!!

    Peut-être ai-je mal compris ce dont tu as besoins.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut
    Désolé, je pense ne pas avoir été assez clair au début^^

    en faite, il me faut une requete qui m'affiche tous les pseudo entre 2 dates et les tri en fonction de leur nombre de points.

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Une petite recherche dans les messages des derniers jours t'aurait donné la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  t1.*
    FROM    stat_membre    AS t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    stat_membre AS t2
                WHERE   t1.pseudo = t2.pseudo
                HAVING  t1.date = MAX(t2.date)  
            )
    ORDER BY t1.points DESC
    ;
    L'usage d'un mot réservé (date) comme nom d'objet est très fortement déconseillé.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    jnore
    Invité(e)
    Par défaut
    j'allais te proposer cette solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
    SELECT pseudo,points
    FROM stat_membre 
    WHERE date IN
           (
             SELECT date
             FROM stat_membre 
             group by date
             having date BETWEEN 'ta_date_mini' and 'ta_date_maxi'
             )
    ORDER BY date DESC,points DESC

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut
    la requete de jnore correspond mieux car la date doit être comprise entre 2 dates!
    mais le problème avec les deux requêtes c'est qu'elles ne gèrent pas les doublons
    (vu que tous les membres sont mis a jour tous les jours)

    @al1_24 :
    le champ s'appelle 'date_sm' et non pas 'date' c'était juste pour simplifier l'exemple!

  11. #11
    jnore
    Invité(e)
    Par défaut
    S'il y a doublon,quelle valeur du champ 'points' , la requete doit-elle sélectionner? La valeur maxi? la moyenne? la valeur mini? la somme?
    Si on fait un regroupement par individu, il faut choisir ce que le champ 'point' doit afficher.
    Dernière modification par jnore ; 19/06/2007 à 22h52.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 84
    Par défaut
    les points ne sont pas important dans la requete, il me faut juste juste les pseudo des joueurs triés dans l'ordre par raport à leur derniers points

    merci de ton aide

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par nounours21_6
    mais le problème avec les deux requêtes c'est qu'elles ne gèrent pas les doublons
    (vu que tous les membres sont mis a jour tous les jours)
    As-tu réellement testé la requête que je t'ai proposé ? Il ne devrait y avoir qu'une ligne par pseudo, celle correpondant à la date la plus récente.
    Pour le filtre de période, rien ne t'empèche de l'ajouter.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  14. #14
    jnore
    Invité(e)
    Par défaut
    les points ne sont pas important dans la requete
    Je pense que si, si tu veux faire un classement . Dans ton premier post tu voulais ce tri par pseudo et par point.



    il me faut juste les pseudo des joueurs triés dans l'ordre par raport à leur derniers points
    Nous n'avions pas cette info!
    Est-ce que ta table a un champ serialisé? cad un champ numéro auto?
    Pour classer en fct des derniers points cela peut être utile.

  15. #15
    jnore
    Invité(e)
    Par défaut
    Allez, soyons fous!!!

    encore un petit essai, en supposant que tu aies un champ sérialisé qui s'appelle 'clé':


    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 pseudo
    FROM stat_membre 
    group by pseudo,date
    having date IN
           (
             SELECT date
             FROM stat_membre 
             GROUP BY date
             HAVING date BETWEEN 'date_mini' AND 'date_maxi'
             )
     
    ORDER BY date desc,max(clé)desc

Discussions similaires

  1. Améliorer requête SQL beaucoup trop longue
    Par faulk dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/06/2014, 12h12
  2. Améliorer une requête SQL d'autocompletion
    Par krunch dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/01/2013, 19h00
  3. [T-SQL] Amélioration requête
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/12/2009, 23h29
  4. amélioration requête sql
    Par mmb04 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2007, 10h47
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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