Faire un classement général ... compte des points dans ma re
Posté : 02 nov. 2007, 15:52
Bonjour,
En ce moment, mes journées sont occupées par la création d'un composant Joomla! qui servira à afficher des classements de courses à pied avec gestion des coureurs, des courses, ... ainsi que l'affichage d'un classement général par année !
On peut déjà voir l'état d'avancement ici.
Je cherche maintenant à afficher un le classement général et, là, je me demande comment (mais surtout si l'on peut faire) une série de calcules dans la requête ! ! !
Commençons par les tables dont on a absolument besoin (pour ne pas compliquer l'histoire le dossard plutôt que le nom de la personne ... je m'occuperai de cela plus tard)
La table des classements qui contient aussi le nombre de point donné à chaque coureur lors d'une course:
- on ne prend que 10 courses 'P' au max pour accorder un bonus de 50 points à chacune d'elle et non les points enregistrés,
- on prend le total des points des 10 meilleures courses 'C',
- toujours pour les courses 'C', on accorde un bonus de 50 points par course supplémentaire à 10 jusque 15.
Tout cela, je l'avais fait en php pour l'affichage de la fiche d'identité des participants (ici, c'est moi !) mais il me semble que ce n'est pas faisable ... je ne vois donc que la requête mais comment ?
Quelqu'un peut-il me venir en aide ?
D'avance merci
En ce moment, mes journées sont occupées par la création d'un composant Joomla! qui servira à afficher des classements de courses à pied avec gestion des coureurs, des courses, ... ainsi que l'affichage d'un classement général par année !
On peut déjà voir l'état d'avancement ici.
Je cherche maintenant à afficher un le classement général et, là, je me demande comment (mais surtout si l'on peut faire) une série de calcules dans la requête ! ! !
Commençons par les tables dont on a absolument besoin (pour ne pas compliquer l'histoire le dossard plutôt que le nom de la personne ... je m'occuperai de cela plus tard)
La table des classements qui contient aussi le nombre de point donné à chaque coureur lors d'une course:
CREATE TABLE IF NOT EXISTS `#__classement` (
`id` INT NOT NULL AUTO_INCREMENT,
`course_id` INT(11) NOT NULL,
`dossard` SMALLINT(5) NOT NULL,
`temps` TIME NOT NULL,
`place` INT(11) NOT NULL,
`moyenne` time NOT NULL,
`vitesse` decimal (4,3) NOT NULL,
`point` int (11),
PRIMARY KEY(`id`)
) TYPE=MyISAM;
et la table qui rassemble les informations sur la course (comme la date, le type de course, ...):
CREATE TABLE IF NOT EXISTS `#__classement_course` (
`id` INT NOT NULL AUTO_INCREMENT,
`course` VARCHAR(45) NOT NULL,
`date` DATE NOT NULL,
`pat_chal` ENUM ('C','P','H') NOT NULL,
`lieu` VARCHAR(45) NOT NULL,
`kilometrage` FLOAT(5,3) NOT NULL,
`nbre_part` INT(11) NOT NULL,
`epreuve_id` INT(11) NOT NULL default '0',
PRIMARY KEY(`id`)
) TYPE=MyISAM;
Pour faire ma requête, j'ai pris 2004 comme année par défaut :
$annee = 2004;
$query = "SELECT clas.id, clas.course_id, clas.dossard as dossard_course, clas.temps, clas.place, clas.moyenne, clas.point, clas.vitesse, "
. "\n course.id, course.course, course.nbre_part, course.date, course.epreuve_id, course.pat_chal"
. "\n FROM #__classement AS clas"
. "\n INNER JOIN #__classement_course AS course ON course.id = clas.course_id"
. "\n WHERE DATE_FORMAT(course.date,'%Y') = '" . $annee . "'" // année 2004 par défaut
//. "\n ORDER BY totalpoint ASC" // J'ai besoin du total des points par coureur pour faire un tri et afficher le classement général
;
$database->setQuery( $query );
$generallist = $database -> loadObjectList();
C'est pour le total des points que cela devient hard car il faut tenir du type de course (course.pat_chal) car:- on ne prend que 10 courses 'P' au max pour accorder un bonus de 50 points à chacune d'elle et non les points enregistrés,
- on prend le total des points des 10 meilleures courses 'C',
- toujours pour les courses 'C', on accorde un bonus de 50 points par course supplémentaire à 10 jusque 15.
Tout cela, je l'avais fait en php pour l'affichage de la fiche d'identité des participants (ici, c'est moi !) mais il me semble que ce n'est pas faisable ... je ne vois donc que la requête mais comment ?
Quelqu'un peut-il me venir en aide ?
D'avance merci