Additionner une partie seulement des champs

Mammouth du PHP | 881 Messages

22 sept. 2007, 17:35

Bonjour!


Je cherche à savoir s'il est possible de faire une requête qui n'additionnera que les 10 meilleurs résultats d'une série de champs.

Voici ma requête actuelle:

Code : Tout sélectionner

SELECT Rang_final, points_1, points_2, points_3, temps, id_coureur, Dossard, Categ, SUM( points_arr ) AS points_arr FROM resultats WHERE circuit_id = 3 AND dte_course LIKE '2007%' GROUP BY id_coureur ORDER BY SUM( points_arr ) DESC LIMIT 0, 10

C'est le SUM(points_arr) que je voudrais me servir une somme des 10 meilleurs points_arr pour chaque coureur.


PS: il s'agit de résultats sportifs dont les 10 meilleurs courses comptent pour chaque compétiteur. Or, ceux-ci sont libres de participer à n'importe quelle des 15 courses.

Merci
Soyez artisans de paix

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

23 sept. 2007, 00:01

Je cherche à savoir s'il est possible de [...]
Tout est possible, mais ça dépend de ton SGBDR et de la structure des données, c'est pour ça que c'était écrit en rouge sur ton écran au moment de poster.

Précise tout ça et quelqu'un pourra te répondre.

Mammouth du PHP | 881 Messages

23 sept. 2007, 03:12

Je reprends donc.

Je fonctionne avec PHP 4 et mon fournisseur MySQL indique: " Version du client MySQL: 4.1.10"

Je veux additionner les 10 meilleurs résultats de chaque coureur et classer - à partir de ces sommes - les coureurs selon leurs pointages.
Il y a donc une table qui s'appelle coureurs, une autre résultats

Voici ma requête actuelle

SELECT (liste de champs),  SUM( points_arr ) AS points_arr 
FROM resultats 
WHERE circuit_id = 3 AND dte_course LIKE '2007%' 
GROUP BY id_coureur 
ORDER BY SUM( points_arr )


Cette commande me donne la somme des x, y, z courses auxquelles chaque coureur a participé.

Je veux que cette somme soit limitée aux 10 meilleures courses, du style

SELECT (liste de champs),  SUM (BEST (points_arr, 10))  AS points_arr 


Je ne veux pas faire de boucle de lecture du style
do { 
   select resultats ... limit 0,10
} WHILE (...coureurs);


Comment faire?
Soyez artisans de paix