richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005
-
21 juin 2005 à 10:32
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 2007
-
23 juin 2005 à 11:27
Bonjour,
je cherche à retrouver une valeur dans un tableau suite à une lecture de données par la requete suivante $result = mysql_query($query). du style
$valeur =$result[5] where $result[1]=xxx
L'idée c'est de ne faire qu'une seule fois la requete SQL
richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005 21 juin 2005 à 11:28
En fait j'utilise 2 tables (T1 : activité, T2: inscription activité), par contre dans T2, il n'existe pas obligatoirement un enregistrement pour T1 (personne inscit à l'activité X)
Je veux faire la liste des activités et aussi afficher le nombre d'inscrits.
J'ai fait une premiere requete qui liste les activités, et pour chaque ligne je refait une seconde requete pour avoir le nombre d'inscrits, c'est un peu lourd et long.
Mon idée est de faire les 2 requetes (R1 : liste des activites, R2: nombre d'inscrits pour chaque activité). Et à l'affichage du résultat de R1 afficher la correspondance R2 (en utilisant un champs commun).
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 21 juin 2005 à 11:43
hum ok :-)
essaie ceci :
SELECT t1.activite,COUNT(t2.id) FROM t1 LEFT JOIN t2 ON t1.activite=t2.id_activite GROUP BY t1.activite
le COUNT() te donnera le résultat du nombre de personnes comptabilisées
en gros chaque personne a un champ "id_activite" et la requête comptera
pour chaque activité le nombre de personnes ayant dans la table 2 le
champ "id_activite" identique
richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005 21 juin 2005 à 15:28
Effectivement ça marche, mais le problème c'est que la requete est hyper longue (les bases contiennes plus de 8000 enregistrements) temps de la requete +10 sec.
Alors que le requete de comptage sans la jointure est plus rapide, c'est pourquoi je voulais utiliser directement le résultat.
richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005 21 juin 2005 à 18:44
T1 activite
act_id : index primaire
act_nom
act_actif
T2 inscription
insc_id : index primaire
act_id : activite
ent_id : id de l'inscrit
insc_deleted
requete :
select activite.act_id, act_nom, act_actif, count(insc_act.insc_id)
from activite T1
left join inscription T2 on T1.act_id=T2.act_id
group by activite.act_id
richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005 22 juin 2005 à 11:17
Je n'ai pas modifié la requete
select T1.act_id, act_nom, act_actif, count(T2.insc_id)
from activite T1
left join inscription T2 on T1.act_id=T2.act_id
group by T1.act_id
seulement ajouté un index sur le champ T2.act_id via PHPMYADMIN
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 22 juin 2005 à 11:28
Ok donc en plus de tes clés uniques, tu vas mettre un index sur les
champs suivants (si le champ en question a déjà une clé unique tu
ne mets pas d'index)
richarddum
Messages postés54Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention20 décembre 2005 22 juin 2005 à 13:19
J'ai refais les index des bases, et re-lancer la requete
Affichage des enregistrements 0 - 29 (570 total, traitement: 0.1044 sec.)
J'ai dû me louper hier.
Merci beaucoup. C'est vrai que jusqu'a présent je ne prêtais pas trop d'attention aux index, je ferais plus attention dorénavant.