Page 1 sur 1

Faire une multitude de requête ou il y a une autre méthode ?

Posté : 16 avr. 2008, 23:29
par Sebe
Bonjour,

J'aimerai avoir un tuyau sur les requêtes car celle que j'envisage de faire risque d'être très lourde !
Déjà pour afficher le résultat que j'espère, je dois faire une requête préalable:
$query = "SELECT annee, dossard"
    	. "\n FROM #__classement_chang"
		. "\n WHERE participant_id = " . $id
 		;
$database->setQuery( $query );
$dossardList = $database -> loadAssocList();
ce qui me créait un tableau comme ceci:
Array ( [0] => Array ( [annee] => 2001 [dossard] => 345 ) [1] => Array ( [annee] => 2002 [dossard] => 203 ) [2] => Array ( [annee] => 2003 [dossard] => 215 ) [3] => Array ( [annee] => 2004 [dossard] => 195 ) [4] => Array ( [annee] => 2005 [dossard] => 138 ) [5] => Array ( [annee] => 2007 [dossard] => 111 ) )
Maintenant, j'aurai besoin de lister toutes les courses ou le couple dossard/annee apparaît ... pour une année cela ne pose pas de problème:
$query = "SELECT clas.id as 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.date as days, course.pat_chal, course.kilometrage, course.nbre_part, course.epreuve_id"    
	. "\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') = '" . (int)$annee . "' AND clas.dossard = '" . (int)$dossard . "'"
	. "\n ORDER BY course.date ASC"
	;
$database->setQuery( $query );
$statistique= $database -> loadAssocList();
mais pour chacun des couples dossard/annee comment je dois m'y prendre !

Merci

Posté : 17 avr. 2008, 00:10
par zeus
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

Posté : 17 avr. 2008, 09:36
par Sebe
Oups, désolè ... j'ai pas fait attention !

Posté : 18 avr. 2008, 09:14
par Sebe
C'est pour un petit up ... donnez moi un cap à suivre, SVP

Merci

Posté : 18 avr. 2008, 09:59
par Hubert Roksor
As-tu essayé d'utiliser IN ?

Code : Tout sélectionner

DATE_FORMAT(course.date,'%Y') IN ('2004','2005','2006')
Si ça ne correspond pas à ce que tu cherches obtenir, merci d'expliquer le résultat obtenu et en quoi il diffère du résultat attendu, le tout en termes pratiques. Pense aussi à poster le schéma de tes tables et poster tes requêtes telles qu'elles sont exécutées, pas sous forme de PHP, qui rend leur lecture difficile.

Posté : 18 avr. 2008, 10:30
par Sebe
Salut,

Je ne connais pas l'instruction IN et je n'ai pas trouvé de quoi me faire les dents sur le net ! Il m'est renvoyé un tableau vide sans erreur donc je ne sais pas en dire plus ...!

En faite, je n'ai pas essayé mais je suis presque certain que cela fonctionnerait avec une boucle où il faudrait refaire la requête tant qu'il y a un couple mais le problème c'est que j'ai peur que cela ralentisse mon affichage à outrance car on parle quand même d'un grand nombre de personne qui sont susceptible (2500) d'avoir participer à 40 événements par an !

Maintenant, je veux bien donner le schéma de mes tables mais je ne pense pas que ce soit utile ... ma question était plus accès sur 'Y-t-il un autre moyen moins coûteux en ressource ?'

Merci

Posté : 18 avr. 2008, 10:44
par Hubert Roksor
IN() est un opérateur de comparaison. Voir http://dev.mysql.com/doc/refman/5.0/fr/ ... ators.html

x IN (y, z) correspond à (x = y OR x = y)
Maintenant, je veux bien donner le schéma de mes tables mais je ne pense pas que ce soit utile ... ma question était plus accès sur 'Y-t-il un autre moyen moins coûteux en ressource ?'
Impossible de dire avec certitude si une méthode est meilleure qu'une autre sans savoir sur quoi elle va s'appliquer. C'est comme si tu demandais si le Super98 était mieux que le Super95, sans préciser que ta voiture est un diesel.

L'autre raison pour poster le schéma de tes tables c'est que ça évite de forcer le lecteur à comprendre le sens de tes données, et ça permet de se concentrer sur le SQL. "course", "année", "dossard", en fait on s'en fiche à quoi ça correspond. Ca pourrait être "ligne", "production", "serie", le problème serait le même du moment que la requête est identique.