methodologie de parcours d'une table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : methodologie de parcours d'une table

par Invité » 22 avr. 2007, 08:01

merci bcp pour vos reponses. J'ai resolu mon problème. ¨ca ressemble beaucoup a ce que sadeq a expliquer.

Merci encore

par sadeq » 20 avr. 2007, 15:34

tu peux écrire le même algo en SQL en écrivant une procédure stockée ou une fonction comme tu peux remplacer la boucle While par une récursivité de fonction.

par iclo » 20 avr. 2007, 14:28

Tout dépend si tu as une longueur fixe pour ton menu, si oui, il est possible de le récupérer directement en une seule requette, en utilisant des alias dans la partie from de la requette.
par exemple, une profondeur de 3 :

Code : Tout sélectionner

select m1.NomMenu, m2.NomMenu, m3.NomMenu from menu m1, menu m2, menu m3 where m3.idParent = m2.id and m2.idParent = m1.id
A tester, et à adapter, mais valable que si tu connais la longeur du menu au départ.

par sadeq » 20 avr. 2007, 13:18

L'algo peut être le suivant:
menu  = getMenu("select * from menu where id = '?'"); //id d'un menu de départ
while (menu[idParent] != null){
   //recherche par parent
    menu = getMenu ("select * from menu where id = 'menu[idParent]'"); 
   //autre code de traitement
  //.....
}
la fonction getMenu($sql) est à développer : elle doit exécuter sql et retourner un tableau d'enregistrements trouvés

par damaskinos » 19 avr. 2007, 19:01

merci de ta reponse

En faite, je connais cette méthode et c 'est pour ca j ai écris ici. Je voulais savoir s'il y avait une autre pour éviter de faire des boucles qui vont envoyer plusieurs requetes a ma BD. Si non, peux tu peux me faire un petit algo de la maniere dont tu vois les boucles.

merci

par sadeq » 19 avr. 2007, 10:09

Ta table contient un champ "idParent" qui sert à mettre en oeuvre un système hierachique pére/fils, n'est-ce pas? bon.

En conception celà s'appelle une relation reflexive, dont le premier parent a un "idParent" nul.

Pour lister les ascendants d'un menu X, il faut remonter l'arbre des parents par l'indicateur "idParent" jusqu'à ce que ce dernier soit nul.

Car si un "idParent" est nul, comme j'ai dis tout à l'heure, c'est qu'il s'agit du premier menu de l'arboréscence.

Une boucle le lecture des menus par la relation idMenu=idParent peut être effectuée jusqu'à ce que l'idParent lu est nul.

methodologie de parcours d'une table

par damaskinos » 19 avr. 2007, 07:20

Bonjour,

Je dois gérer des menus de manière dynamique. J'ai crée une table qui a pour colonne
idMenu, idParent, NomMenu

J'aimerais savoir si en une requete c'est possible de sortir un sous arbre ( menu1, menu1.1,menu1.1.1, menu2, menu2.1 etc...). Je n'arrive pas a voir comment je peux lister complètement une feuille jusqu'à son ancêtre le plus haut. Je veux pas avoir 10 milles boucles dans mon code php.

Merci de vos sugestion