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

Mammouth du PHP | 545 Messages

16 avr. 2008, 23:29

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 avr. 2008, 00:10

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 545 Messages

17 avr. 2008, 09:36

Oups, désolè ... j'ai pas fait attention !
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 545 Messages

18 avr. 2008, 09:14

C'est pour un petit up ... donnez moi un cap à suivre, SVP

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2008, 09:59

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.

Mammouth du PHP | 545 Messages

18 avr. 2008, 10:30

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2008, 10:44

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.