Besoin d'un coup de pouce pour optimiser un petit script [PHP/MySQL] - PHP - Programmation
Marsh Posté le 16-12-2002 à 00:24:54
tu veux lister
catégorie1
-produit1
-produit2
...
catégorie2
-produit1
-produit2
...
c'est ça ?
Marsh Posté le 16-12-2002 à 07:24:50
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
Marsh Posté le 16-12-2002 à 12:04:48
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 :
|
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)
Marsh Posté le 15-12-2002 à 23:35:30
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 :
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 :
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