Table catégorie, fonction boucle récursive

Résolu/Fermé
ricoswx Messages postés 3 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 11 janvier 2009 - 9 janv. 2009 à 23:12
ricoswx Messages postés 3 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 11 janvier 2009 - 11 janv. 2009 à 01:15
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

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 vendredi 9 janvier 2009 Statut Membre Dernière intervention 11 janvier 2009
11 janv. 2009 à 01:15
C'est TOP ! Merci !
0
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 vendredi 9 janvier 2009 Statut Membre Dernière intervention 11 janvier 2009
11 janv. 2009 à 00:59
Merci toto ! ;-)

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