Séléctionner les n premiers de chaque équipe
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 :
Je suis arrivé à sélectionner les 3 premiers dossards de chaque équipe avec la requête suivante :
Mais dès que je change le critère de selection DOSSARD par TEMPS je me perds
Pouvez-vous m'aider?
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
-
Ou alors quelle est la méthode en PHP?
-
Tu utilises quel SGBD ?
-
ModérateurSalut,
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 ?
-
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