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 :

Problème avec une requête MySQL


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème avec une requête MySQL
    Bonjour,

    C'est probablement un petit problème pour les habitués de ce forum, mais pour moi, je n'y arrive pas du tout. J'ai 2 tables: Course et Result.

    CourseNo, CourseNom
    1, 'Marathon des deux rives'
    2, 'Demi-Marathon International de Québec'
    3, 'Mississauga Marathon'
    4, 'Marathon International de Montréal'
    5, 'Walt Disney World Marathon'
    6, 'Maski-Courons'
    7, 'La course chiroratique de UQTR'


    ResultDate,ResultTemps,ResultDistance,ResultCourseNo
    '1994-09-11', '04:25:19', 42.195, 4
    '1995-01-08', '04:41:34', 42.195, 5
    '1995-06-11', '01:44:35', 20, 6
    '1997-06-15', '23:59:59', 20, 6
    '2000-06-11', '01:53:01', 20, 6
    '2000-09-17', '00:51:00', 10, 7
    '2004-05-09', '02:13:50', 21.1, 2
    '2004-08-29', '02:00:35', 21.1, 1
    '2005-05-08', '02:00:20', 21.1, 2
    '2005-05-15', '02:07:58', 21.1, 3
    '2005-08-28', '01:58:54', 21.1, 1
    '2006-05-14', '02:05:03', 21.1, 3
    '2006-08-27', '04:12:00', 42.195, 1

    Je veux afficher pour chacune des distances (ResultDistance), mon meilleur temps ainsi que la date et le nom de la course.

    Pour le moment, j'ai essayé ceci:

    SELECT Result.ResultDate,Min(Result.ResultTemps)as MeilleurTemps,Result.ResultDistance,Result.ResultCourseNo,Course.CourseNom FROM Result INNER JOIN Course ON Result.ResultCourseNo=Course.CourseNo GROUP BY Result.ResultDistance ORDER BY Result.ResultDistance DESC;

    Je réussi à extraire le meilleur temps pour chacune des distances, mais ce n'est pas la bonne date ni le bon nom de course qui est extrait.

    Si quelqu'un pouvait m'aider à y voir plus clair, j'apprécierais grandement.

    Merci,

    Eric

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    C'est surtout un classique.
    http://www.developpez.net/forums/sho...d.php?t=176538

    En gros un select ne devrait revoyer que des champs cités dans le 'group by' (ou qui sont contants pour un groupement donné) ou utiliser MAX/MIN/...
    Sinon les valeurs sont indéterminées. Comme 'ResultCourseNo' qui peut varier pour une valeur de 'ResultDistance'.

    Alors au choix sous requète ou auto-jointure.



    Ce problème revient souvant et ne semble pas être dans la FAQ. Hummm...

  3. #3
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Et si je comprends bien, dans l'exemple où tu me réfères, il s'agit d'une sous-requête.

    Est-ce qu'il y a préfèrence à utiliser une sous-requête plutôt qu'une auto-jointure?

    Merci,

    Eric

  4. #4
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ok, j'ai trouvé la réponse dans la FAQ concernant le WHERE plutôt que le JOIN...

    Il ne me reste qu'à trouver comment faire la requête avec une jointure.

    Merci

  5. #5
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    J'ai fait un test et l'auto-jointure est bien plus rapide que la sous-requête. Sur une table de 9000 enregistrements c'est 1min30 contre plus de 6min (en gros, et suivant les cas ça peut être pire).

    Dans tous les cas ce n'est pas fameux et il serait peut-être préférable si la table grandit et/ou si la requête est fréquente (une fois par jour avec 100 enregistrements ça passera) de récupérer d'abord les temps minimums puis de récupérer les Result correspondants (avec un index sur (ResultTemps, ResultDistance) ce sera rapide). Ou alors stocker et garder à jour les meilleurs temps dans 'Course'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT r1.ResultDate, Min(r2.ResultTemps) as MeilleurTemps, r1.ResultDistance, r1.ResultCourseNo, Course.CourseNom 
    FROM Result r1, Result r2, Course 
    WHERE r1.ResultCourseNo=Course.CourseNo
      AND r1.ResultDistance=r2.ResultDistance
    GROUP BY r2.ResultDistance, r1.ResultTemps, r1.ResultDate
    HAVING r1.ResultTemps=MIN(r2.ResultTemps);
    (r1.ResultTemps, r1.ResultDate) est supposé donner un unique Result (ce qui semble être le cas), à défaut d'une clef. S'il y a plusieurs temps les plus courts ils seront tous listés.

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

Discussions similaires

  1. Encore un problème avec une requête MYSQL en C#
    Par encoremoi21258 dans le forum C#
    Réponses: 3
    Dernier message: 08/03/2014, 21h53
  2. Probléme avec une requéte mysql(Oracle 9)
    Par lmkrte dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2007, 22h41
  3. Problème avec une requête
    Par ringostarr dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2005, 20h34
  4. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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