Table catégorie, fonction boucle récursive

Résolu
ricoswx Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
ricoswx Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai une table MYSQL 'category'


CAT_ID    CAT_PARENT_ID    CAT_PROFONDEUR   CAT_NOM   
---------------------------------------------------------------------------------------
1            0               1              Cat 1
2            0               1              Cat 2
3            1               2              Cat 1.1
4            1               2              Cat 1.2
5            4               3              Cat 1.1.1
6            2               2              Cat 2.1
7            2               2              Cat 2.2



J'aimerai pouvoir afficher une liste déroulante SELECT en PHP sous la forme :

.Cat 1
..Cat 1.1
...Cat 1.1.1
..Cat 1.2
.Cat 2
..Cat 2.1
..Cat 2.2

Je sais que je dois utiliser une fonction récursive car je peux rajouter autant de catégories et de sous catégories mais je bug complètement HELP Please !! ;-)
A voir également:

3 réponses

toto
 
Attention, je n'ai pas fignolé. Pas de protection contre les données incohérentes : plantage assuré en cas de référence circulaire par exemple.

Je n'utilise pas le champ CAT_PROFONDEUR, son équivalent est la variable $profondeur qui est incrémentée pour l'appel à l'analyse des descendants.

function DescendantsDe($parent,$profondeur) {

  $query="SELECT * FROM `category` WHERE `CAT_PARENT_ID`= $parent ORDER BY `CAT_NOM`"; // ORDER BY selon les besoin
  $resultat= mysql_query($query) or die(mysql_error());  // extraire les sous-catégories de $parent 
  $nb = mysql_num_rows($resultat);  
  if ($nb==0) return;          // il n'y en a pas, fini

  // il y a des descendants 
  if ($profondeur==0) echo "<select>";  // c'est le début de l'analyse

  while ($fils=mysql_fetch_array($resultat)) {  // boucle sur les descendants
    echo '<option>',str_repeat('- ',$profondeur + 1), htmlentities( $fils['CAT_NOM']), '</option>'; // afficher la catégorie
    DescendantsDe($fils['CAT_ID'], $profondeur + 1); // afficher récursivement les sous-catégories
  } // while

  if ($profondeur==0) echo "</select>"; // fin de l'analyse

}  // function DescendantsDe

// connexion comme d'hab, puis
DescendantsDe(0,0); // création du SELECT
1
ricoswx Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
C'est TOP ! Merci !
0
toto
 
Bonjour

Sujet pas tout à fait immédiat, même si le script résultant est sûrement assez court.
Remarque : la colonne Cat_Profondeur est théoriquement inutile. Que faire si elle dit qu'une catégorie est de profondeur 3 alors qu'elle a un parent de profondeur 1 ?
J'ai bien envie de le faire, mais j'espère que que tu n'es pas trop pressé.
0
ricoswx Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci toto ! ;-)

Je vais déjà faire mes tests et te commenter mes résultats mais un grand MERCI d'avance!
0