Table catégorie, fonction boucle récursive
Résolu
ricoswx
Messages postés
3
Statut
Membre
-
ricoswx Messages postés 3 Statut Membre -
ricoswx Messages postés 3 Statut Membre -
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
- Mon pc s'allume et s'éteint en boucle - Forum Matériel & Système
- Livre catégorie 8 signification - Forum Loisirs / Divertissements
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
Statut
Membre
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é.