Séléctionner les n premiers de chaque équipe

cyrille50890 Messages postés 3 Statut Membre -  
cyrille50890 Messages postés 3 Statut Membre -
Bonjour,

Je travail actuellement sur un logiciel de classement de course cyclisme (Type : Tour de France)

Ma base de donnée contient les différentes table ci-dessous :

- categorie : IdCategorie, NomCategorie (sur une course on peut trouver différente catégorie en même temps et dans les même classement)
-club : IdClub, NomClub, IdDirSportif
-coureur : NumLicence, Nom, Prenom, DateNaissance
-course : IdCourse, NomCourse, NbCoureurMG, NbCoureurPC
-dirsportif : IdDirSportif Nom, Prenom, NumTel
-discipline : IdDiscipline, NomDiscipline
-etape : Annee, Depart, Arrivee, NumEtape, NbPointChaud, NbMeilleurGrimpeur, NbKm, IdDiscipline, IdCourse

-inscription : IdCourse, NumLicence, NumDossard, IdClub, IdCategorie
-resultats : Annee, NumEtape, Idcategorie, TempsEtape, Place, NbPtsMG, NbPtsPC, NumLicence, IdCourse

Avec ces tables, j'arrive à faire le classement par etape, le classement du meilleur jeune (Blanc), classement PC (Vert), classement MG (Pois) et Général individuel (Jaune)

Il me manque le classement par Equipe :s
Cf : WIKIPEDIA

Définition du classement par équipe type tour de france :
"Méthode de calcul

Actuellement, il est établi par l'addition des temps des trois meilleurs coureurs de chaque formation sur chaque étape. Si une équipe a moins de trois coureurs restants, elle est supprimée du classement."

Il faut pour cela combiner la requete SQL du classement général :

SELECT Annee, NumEtape, IdCategorie, sum(TempsEtape), sum(Place), NumLicence, IdCourse FROM resultats WHERE IdCourse = '".$CourseActuelle."' AND Annee = '".$Annee."' AND TempsEtape !='0000000' GROUP BY NumLicence ORDER by sum(TempsEtape) ASC, sum(Place) ASC


Je suis arrivé à sélectionner les 3 premiers dossards de chaque équipe avec la requête suivante :

SELECT r.TempsEtape, r.place, i.NumLicence,c.NomClub FROM resultats r
JOIN inscription i ON i.NumLicence = r.NumLicence
JOIN club c ON i.IdClub = c.IdClub
WHERE (SELECT COUNT(*) FROM resultats r1 
WHERE  r1.NumLicence = r.NumLicence AND r1.Place >r.Place)>3


Mais dès que je change le critère de selection DOSSARD par TEMPS je me perds

Pouvez-vous m'aider?

4 réponses

  1. cyrille50890 Messages postés 3 Statut Membre
     
    Ou alors quelle est la méthode en PHP?
    0
  2. MrSlave Messages postés 2657 Statut Membre 147
     
    Tu utilises quel SGBD ?
    0
  3. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    PHP n'a rien à voir là-dedans.

    C'est ton SGBD qui fait les requêtes, peut-être dispose-t-il des prédicats du genre TOP n ?
    0
  4. cyrille50890 Messages postés 3 Statut Membre
     
    J'utilise MySQL version 5.1.36

    Pour le TOP je sais pas mais le MAX et le MIN Fonctionnent je les utilise pour faire les écarts
    0