Rechercher une valeur dans un tableau [Résolu]

Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
- - Dernière réponse : cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 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

Merci
Afficher la suite 

Votre réponse

20/23 réponses

Meilleure réponse
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
3
Merci
hum ok



tu peux passer le champ "act_actif" de T1 en TYNINT(1) au lieu de int



ça n'occupera plus qu'un octet au lieu de 4 par valeur.



Ensuite sur la table inscription, tu as trois clés, bref c'est inutile, supprime la clé act_id_2 et act_id_3



et pareil, remplace le INT(1) du champ insc_deleted par un TYNINT(1)



Ensuite fais un "OPTIMIZE TABLE activite,inscription"



et refais ensuite ta requête. Regarde le temps de génération et poste-le ici :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 99 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Salut,



sois plus précis STP, ton explication est trop vague... Tu récupères une valeur avec MySQL et t'en fais quoi ensuite ?

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
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).

En espérant avoir été clair.
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
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



a ++

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
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.
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Hum, tu as indexé certains champs ?



Tu peux donner la structure de ta table stp ?



Merci

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
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
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Rajoute un index dans ta table T2 sur le champ act_id



et regarde ensuite le temps d'exécution de la requête.

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
Effectivement, ça change, la requete c'est faite en 2 sec.

Existe-il un site qui donne des infos sur les indexs (que je ne maitrise pas du tout)

Merci.

Richard
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
2 secondes c'est encore énorme, rajoute un index sur le champ activite dans T1 (je l'avais pas vu)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
Activité est le nom de la base
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
file-moi la requête telle que tu l'as modifiée stp que je te dise quels champs indexer

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
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
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
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)



- T1.act_id

- T2.act_id

- T2.insc_id



voilà



mesure le temps d'exécution de la requête ensuite

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
C'est déjà comme ça
- T1.act_id (index primaire)
- T2.act_id (index)
- T2.insc_id (index primaire)
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Quels sont les types de tes champs ? (fais une exportation de la structure de ta table dans phpmyadmin et colle-là ici stp)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
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.
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
attends y'a encore moyen d'optimiser. Tu fais quoi exactement ? un affichage page par page ?



si oui on peut utiliser le champ insc_id, mais j'attends ta réponse

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
Non, je ne fais pas d'affichage page par page pour l'instant
Commenter la réponse de richarddum
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Ok, tu peux coller la structure de ta table stp ? (dans phpmyadmin,
fais "exporter" coche "structure" et colle ici ce que ça te donne)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.