Liste de la hiérarchie

Liste de la hiérarchie - PHP - Programmation

Marsh Posté le 11-04-2007 à 11:03:34    

Salut à tous,
j'ai créé un script qui permet d'obtenir une hiérarchie (catégorie et sous-catégorie, ... à l'infini), mais je n'arrive pas à obtenir une liste toute simple pour l'utiliser dans une requête Mysql.
Voici mon script:

Code :
  1. function item_tree($id_item, $name_item, $name_item_parent, $table)
  2. {
  3. echo "<ul>";
  4. $req_item = mysql_query("SELECT * FROM $table WHERE $name_item_parent='$id_item'" );
  5. $num_item = mysql_num_rows($req_item);
  6. for ($i = 0 ; $i < $num_item ; $i++)
  7.    {
  8.         $id_item = mysql_result($req_item,$i,"$name_item" );
  9.         echo "<nobr>";
  10.         echo "<li>";
  11.         echo "<option>$id_item";
  12.         echo "</option>";
  13.         echo "</nobr>";
  14.                 item_tree($id_item, $name_item, $name_item_parent, $table);
  15. }
  16. echo "</ul>";
  17. }


Message édité par polo7 le 11-04-2007 à 11:06:18
Reply

Marsh Posté le 11-04-2007 à 11:03:34   

Reply

Marsh Posté le 11-04-2007 à 13:11:22    

que viennent faire des balises options dans des balises ul???

Reply

Marsh Posté le 11-04-2007 à 13:18:11    

question:  
ton truc fait un requete par noeud de ton arbre, donc si on prend un arbre binaire de profondeur n, tu vas faire n(n+1)/2 requêtes. T'as pas peur que ça rame???

Reply

Marsh Posté le 11-04-2007 à 15:45:27    

Hello,
La balise option, ne pas en tenir compte, je l'utilisait pour autre chose.
Ca rame pas trop, ça fonctionne bien, mais la question, c'est d'obtenir une liste de tous les items sous un item donné.

Reply

Marsh Posté le 11-04-2007 à 16:07:49    

comprends pas ce qui marche pas !!! Ce que tu fais est a peu près bon sur le passage recursif de id_item. Il va falloir détaillé le dysfonctionnement.
Par contre  $name_item, $name_item_parent, $table ne sont jamais modifées s'normal?
 
Note: dans mon poste précédent j'ai écrit une bonne boulette, le nombre de requêtes est (2^n+1)-1 et non n(n+1)/2 ...

Reply

Marsh Posté le 11-04-2007 à 16:40:17    

avec ça, j'affiche la hiérarchie, mais j'aimerais obtenir une variable de sortie avec la liste des id_item.
C'est peut-être con, mais là je bug.

Reply

Marsh Posté le 11-04-2007 à 16:55:01    

tu passes une référence à un tableau en paramètres à ta fonction, dans ta boucle for tu push $id_item dedans( ou la même sans référence mais avec une variable "globale" ), ou encore tu fais retourner la liste des id_items trouvées à ta fonction item_tree


Message édité par anapajari le 11-04-2007 à 16:55:31
Reply

Marsh Posté le 11-04-2007 à 17:25:09    

moi, je vois plutôt une boucle while qui parcourt un tableau initialisé avec l'item de départ et qui boucle sur ce tableau tant qu'il y a de nouveaux fils trouvés à ajouter à ce tableau.

Reply

Marsh Posté le 11-04-2007 à 19:44:01    

merci, quel code proposez-vous ?
Je ne maitrise pas tout.

Reply

Marsh Posté le 13-04-2007 à 14:38:58    

t'as pas compris le principe : TU proposes du code à partir de ce qu'on t'as dit et ensuite on affine ensemble...

Reply

Marsh Posté le 13-04-2007 à 14:38:58   

Reply

Marsh Posté le 13-04-2007 à 15:06:45    

c mort avec cette structure a la base quoi que tu fasses

Reply

Marsh Posté le 13-04-2007 à 17:28:44    

Là, je ne suis pas d'accord. Certes, côté perfs, c'est pas terrible du tout (surtout si l'arborescence est grosse) mais pour une table de qq 100ènes d'enregistrements, ça passe sans pbs.

Reply

Marsh Posté le 13-04-2007 à 18:11:13    

Comment tu extrait tous les noeuds/feuille d un noeud donne ?

 

C est forcement un nombre de requete ~= au nombre de noeud ou une requete de malade donc ca sux.

 

T as la ptite hierarchie:

 

--root
---- n1
--------[n3]
------------n5 *
----------------n7 *
----------------n8 *
------------n6
--------n4
---- n2

 

Je voudrais tous les noeud (et le contenu) sous n3 en une requete sur des index  car justement j utilise cette hierarchie sur toutes les pages de mon site et puis j en ai plein d autres. :s


Message édité par supermofo le 13-04-2007 à 18:27:49
Reply

Marsh Posté le 13-04-2007 à 23:49:49    

c'est intéressant tout ça, mais c'est pas simple, il faut se casser la tête.
Avec la boucle while, je n'y arrive pas.

Reply

Marsh Posté le 16-04-2007 à 09:45:42    

ben la boucle while, pour le coup, c'est assez simple...Simule l'algo sur papier en te baseant sur l'ex de supermofo.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed