Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1525 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/MySQL] Besoin d'un coup de pouce pour optimiser un petit script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/MySQL] Besoin d'un coup de pouce pour optimiser un petit script

n°270127
Core 666
Posté le 15-12-2002 à 23:35:30  profilanswer
 

J'utilise un bout de script qui fonctionne bien, mais qui me semble beaucoup trop lourd par rapport au résultat qu'il donne. Vu que je ne suis pas un pro du maniement de tableaux, si quelqu'un veut bien me filer un coup de pouce pour optimiser ca ce sera avec plaisir :)
 
Alors, je commence par récupérer une liste de produits (catégorie mère + nom) et à la stocker dans un tableau, qui sera utilisé plus loin. Le tableau est réalisé ainsi :
 

Code :
  1. $requete = mysql_query("SELECT cat_produit, nom_produit FROM produits", $db);
  2. $nbproduits = mysql_num_rows($requete);
  3. if($nb_nbproduits ) {
  4.     do {
  5.         $liste_produits[] = array($myrow[0] => $myrow[1]);
  6.     } while($myrow = mysql_fetch_row($requete));
  7. }


 
Un peu plus loin donc, je décompose ce tableau. Ca se fait à l'intérieur d'une boucle qui liste plusieurs infos en provenance d'une autre table. Parmi ces infos on retouve la catégorie mère ($donnees[$i][0]), et lorsqu'elle coincide avec la catégorie des produits récupérés plus haut je fais un simple echo du nom du produit :
 

Code :
  1. while(list($null, $produit) = each($liste_produits)) {
  2.     while(list($cat_produit, $nom_produit) = each($produit)) {
  3.         if($cat_produit == $donnees[$i][0]) {
  4.         echo $nom_produit;
  5.         }
  6.     }
  7. }


 
Ce bout de script n'est pas catastrophique prit de manière isolée, mais quand il s'exécute à l'identique autant de fois qu'il y a de lignes $i dans ma deuxième boucle, c'est pas génial. Je suis un adepte de la bidouille, mais quand elle ne se fait pas au détriment des performances. Une idée pour améliorer ca ?
 
PS : je précise que j'ai déjà testé une fonction qui me permet de me passer de la première partie du script, en sélectionnant dans la seconde uniquement les enregistrements qui m'intéressent (SELECT nom_produit FROM produits WHERE cat_produit = $donnees[$i][0]). Il n'y a pas redondance d'infos et ca économise une boucle*$i, par contre c'est plus couteux niveau MySQL et ca se voit en temps processeur (chiffres à l'appui). Je préfère donc faire une seule requête MySQL en laissant PHP se démerder pour traiter ca derrière, plutôt que d'avoir plusieurs petites requetes (d'autant plus que MySQL est installé sur un serveur distant au perfs aléatoires).


Message édité par Core 666 le 15-12-2002 à 23:46:41
mood
Publicité
Posté le 15-12-2002 à 23:35:30  profilanswer
 

n°270137
ethernal
Chercheur de vérité...
Posté le 16-12-2002 à 00:24:54  profilanswer
 

tu veux lister  
 
catégorie1
 -produit1  
 -produit2
...
catégorie2
 -produit1  
 -produit2
...
 
c'est ça ?


---------------
...oups kernel error...
n°270159
Core 666
Posté le 16-12-2002 à 07:24:50  profilanswer
 

C'est ca oui :)
 
Enfin, je ne sais pas quelle est l'idée que tu as derrière la tête et ca si change quelque chose, mais ca correspond un peu plus à :
 
catégorie1  
-produit1  
-produit2  
...  
catégorie2  
-produit3  
-produit4
 
:)

n°270304
ethernal
Chercheur de vérité...
Posté le 16-12-2002 à 12:04:48  profilanswer
 

mais à quoi te sert le donnee[$i][0] ???
tes tables sont bien comme ceci ?
table categories : cat_id, cat_nom
  avec cat_prod en primary key, autoincrement
table produits : prod_id, cat_id, prod_nom  
  avec prod_id en primary key, autoincrement
       cat_id en index
 
si tu veux faire ce que tu dis, ceci suffit :

Code :
  1. $result = mysql_query("SELECT cat_nom, prod_nom FROM categories C, produits P where C.cat_id=P.cat_id", $db);
  2. $prev= '';
  3. while ($row= mysql_fetch_array($result) ){
  4.   if ( $row['cat_nom']!= $prev ){
  5.     echo $row['cat_nom'].'<br>';
  6.   }
  7.   echo '->' . $row['prod_nom'].'<br>';
  8.   $prev= $row['cat_nom'];
  9. }


 
maintenant il faut voir si tu veux afficher toute les categories et tout les produits sur une page, ou juste les produits d'une catégorie définie par l'utilisateur (passée en paramètre lors de l'appel à la page.
ex index.php?categorie=2:
categorie1
categorie2
  produit1
  produit2
categorie3
...
dans ce cas, tu rajoutes un if après le if ($row['cat_nom']!=$prev)


Message édité par ethernal le 16-12-2002 à 12:24:47

---------------
...oups kernel error...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/MySQL] Besoin d'un coup de pouce pour optimiser un petit script

 

Sujets relatifs
[php mysql] combien facturer ce developpement ???mysql : c de la m**** !
Ouoverture de page par script PHP[Java] besoin d'aide bidouillage BigInteger BigDecimal
question mysql :phpmyadmin ??[PHP MYSQL] Trier une table dans la base
[MySQL]optimisation requetebesoin d'un tout petit programme :-/
Plus de sujets relatifs à : [PHP/MySQL] Besoin d'un coup de pouce pour optimiser un petit script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR