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

Fermé
cyrille50890 Messages postés 3 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 août 2011 - 18 août 2011 à 21:11
cyrille50890 Messages postés 3 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 août 2011 - 19 août 2011 à 20:22
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

cyrille50890 Messages postés 3 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 août 2011
18 août 2011 à 23:04
Ou alors quelle est la méthode en PHP?
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
19 août 2011 à 08:51
Tu utilises quel SGBD ?
0
blux Messages postés 26055 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 17 mai 2024 3 290
19 août 2011 à 09:37
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 jeudi 18 août 2011 Statut Membre Dernière intervention 19 août 2011
19 août 2011 à 20:22
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