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

cyrille50890 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
cyrille50890 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
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?

A voir également:

4 réponses

cyrille50890 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Ou alors quelle est la méthode en PHP?
0
MrSlave Messages postés 2587 Date d'inscription   Statut Membre Dernière intervention   147
 
Tu utilises quel SGBD ?
0
blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
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
cyrille50890 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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