Script de recherche dans Arborescence

Darco
Invité n'ayant pas de compte PHPfrance

30 juin 2011, 17:50

Bonjour à tous,
Voilà j'ai un soucis de concepotion de script :(

Dans une table d'abo j'ai ce genre d'enregistrement :

id | NOM | Parent |
1 | Accueil | 0 |
2 | Menu 1 | 0 |
3 | Menu 2 | 0 |
4 | Menu 1-1 | 2 |
5 | Menu 1-2 | 2 |
6 | Menu 1-3 | 2 |
7 | Menu 2-1 | 3 |
8 | Menu 2-2 | 3 |
9 | Menu 2-2-1 | 8 |

....
id = Identifiant de la table
Nom = Nom de la Rubrqieu (ou Sous-Rubrique, Sous-Sous-Rubrique... etc.)
Parent = Le lien entre les rubrique.
Ex. : Ici l'enregistrement numéro 4 est "l'enfant" du numéro 2.

Qui me permet d'afficher un menu déroulant sous "X" Niveau.

Ce que j'aimerai c'est ou que je sois dans l'arborescence je puise retrouver "La Rubrique Mère" ddans laquelle je me trouve.
Alors j'ai fait :

Je regarde le champ parent ou je me trouve, si c'est égal à "0" (zéro) je suis dans ma "Rubrique Mère"
Sinon je regarde a quel "ID" correspond ce "PARENT"... Ainsi de suite...
Mais je ne sais pas à l'avance la "profondeur" du Menu. Et je ne veux (et ne peux) pas faire un test sur "X" niveau
Y aurait'il un moyuen plus simple !?
Merci
De votre aide.
Darco

ViPHP
ViPHP | 2577 Messages

01 juil. 2011, 08:47

Bonjour,

Il faut faire une fonction récurcive qui s'appelle elle même.
function mere($id)
{
   $SQL = 'select...'; /* de la ligne $id
   $res = mysql-query($SQL);
   $data = mysql_fetch_assoc($res);  
   if ($data['parent'] == 0) 
   {
      return $id; /* plus de parent
   }
   else
   {
      return mere($data['parent']); /* tu recherches le parent suivant
}
(tu ajouteras le controle de la bonne exécution de mysql)

Darco
Invité n'ayant pas de compte PHPfrance

01 juil. 2011, 14:11

Mazarini,
Je te remercie de ta réponse... Je n'y avais pas pensé... peur de boucle sans fin peut être.

Je vais la mettre en pratique..
Encore Merci
Darco