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 -
ricoswx Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une table MYSQL 'category'
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 !! ;-)
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:
- Table catégorie, fonction boucle récursive
- Table ascii - Guide
- Fonction si et - Guide
- Table des matières word - Guide
- Table des caractères - Guide
- Table des figures google doc ✓ - Forum Word
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.
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
ricoswx
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
C'est TOP ! Merci !
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é.
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é.