Requêtes imbriquées

Eléphanteau du PHP | 46 Messages

12 sept. 2006, 23:51

J'ai un soucis dans une fonction (c'est pas un soucis ,mais je pense qu'elle est super lente).

Voila ,je m'explique :j'ai une table produit
ce produit contient un champs région (clé étrangère de la table région)

La table région contient plusieurs champs
id : identité de la région (clé primaire)
nom : nom de la région
nom_pays : nom du pays de cette région

Ma fonction affiche les produits par pays d'abord ,et si je clique sur un pays ,j'affiche les produits de ce pays

donc j'ai une fonction qui fait ceci

une requête sur région pour sélectionner les différents pays le résultat est mis dans un tableau résultat

je fait ma boucle while sur le résultat ,et pour chaque pays ,je refait une autre requête pour chercher les produits correspondant à ce pays.

et c'est super long

donc j'aimerais savoir si le problème vient du fait qu'il y a deux requêtes imbriqués dans une boucle while qui ralenti la vitesse
dans ce cas la ,si il y a un moyen de contourner ceci

Merci de votre aide ,en vous souhaitant une agréable journée.

un peut de code:

Code : Tout sélectionner

$resulttype4=SelectGroupe("type_depart,produits","type_depart.dep_ID,type_depart.id_pays,COUNT(*)AS nbre", "type_depart.dep_ID=produits.dep_ID AND produits.activ=0 AND produits.transac=0", "type_depart.id_pays"); // SelectGroupe est une fonction qui fait un SELECT ... Grouped By // ici elle selectionne tout les pays ou il y a des produits while ($row4 = mysql_fetch_array($resulttype4)) { echo $row4['id_pays']; // affichage du pays if ( ($Type!="")) { // maintenant si j'ai cliquée sur un pays (je peux le savoir grace à $Type) $sql = "SELECT type_depart.dep_ID,type_depart.nom_Dep FROM type_depart,produits WHERE type_depart.dep_ID=produits.dep_ID AND produits.activ=0 AND produits.transac=0 AND type_depart.`id_pays` = '$Type' GROUP BY type_depart.nom_Dep"; //je cherche les regions //(ou departement du pays cliqué) $resulttype3=mysql_query($sql) or die ("Erreur:".mysql_error().$sql); while ($row3 = mysql_fetch_array($resulttype3)) { echo $row3['nom_Dep']; // j'affiche la region } $Type=""; } }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 sept. 2006, 09:14

Est-ce qu'il est possible de voir la requete qui est exécuté dans la fonction SelectGroup() ?

Je pense qu'en partant de ta 1ere requete, il devrait être possible d'avoir directement les produits des pays répondant au critère de tri. Il me semble que les tables utilisées pour les 2 requetes sont les mêmes. :-k
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

Eléphanteau du PHP | 46 Messages

13 sept. 2006, 17:18

Est-ce qu'il est possible de voir la requete qui est exécuté dans la fonction SelectGroup() ?

Je pense qu'en partant de ta 1ere requête, il devrait être possible d'avoir directement les produits des pays répondant au critère de tri. Il me semble que les tables utilisées pour les 2 requetes sont les mêmes. :-k
Bonjour ,
Voila j'affiche la 1ère requête :
SELECT type_depart.dep_ID,type_depart.id_pays,COUNT(*)AS nbre 
FROM type_depart,produits 
WHERE type_depart.dep_ID=produits.dep_ID 
AND produits.activ=0 
AND produits.transac=0 
GROUP BY type_depart.id_pays
Donc ici ,je sélectionne tous les pays ou il y'a des produits et je les affiche ensuite si je clique sur un pays ,je récupère son id et je cherche ses régions et je les affiche ,la requête correspondante est la suivante :
SELECT type_depart.dep_ID,type_depart.nom_Dep,COUNT(*)AS nbre 
        				    
FROM type_depart,produits 
WHERE type_depart.dep_ID=produits.dep_ID 
AND produits.activ=0 
AND produits.transac=0 
AND type_depart.`id_pays` = '$Type'
GROUP BY type_depart.nom_Dep
le pays je peut le savoir grâce à $Type

voila sur un autre forum une personne m'a dit ,le fait que j'ai fait deux requêtes imbriquées qui fait que c'est long.

Voila mille merci[/php]