[mysql]requete de type arbre (rechercher n-peres]

requete de type arbre (rechercher n-peres] [mysql] - SQL/NoSQL - Programmation

Marsh Posté le 18-11-2002 à 14:49:22    

Voila en gros le systeme :
J ai un systeme de resisddences  et sous residences
Une residence peut etre la sous reseidence d'une autre et ca n-fois.
Je voudrais faire une requete qui pour une resisdence donne, tous ses sous-residences et leurs enfants
 

Code :
  1. REsidence Resisdence-Mere
  2. 1     
  3. 2      1
  4. 3      1
  5. 4      5
  6. 5      3
  7. 6      1
  8. 7     
  9. 8      7
  10. 9      8


 
Donc si je demande la resisdence 1, j aurais
1,2,3,4,5,6


Message édité par Sebastien le 18-11-2002 à 15:06:59
Reply

Marsh Posté le 18-11-2002 à 14:49:22   

Reply

Marsh Posté le 18-11-2002 à 14:50:58    

Ps : la structure n'est pas fixe, donc si vous voyez un meilleur moyen d organiser la ou les tables, je suis preneur.

Reply

Marsh Posté le 18-11-2002 à 17:23:54    

Une requête récursive :love:
 
Le truc trop lourd! :D
 
Sous forme de curseur, ça doit se faire assez facilement.
En requête brute, là, c'est pas gagné :(

Reply

Marsh Posté le 18-11-2002 à 17:45:54    

si tu limites en niveaux de parents / enfants, quelques auto-jointures feront l'affaire, sinon.. non.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-11-2002 à 17:47:44    

Je crois bien que c'est à peu près impossible, à moins d'utiliser une proc' stock', mais ce n'est pas possible avec MySQL, il me semble... C'est pas gagné.
 
Tu as plutôt intérêt à faire un SELECT * FROM matable et utiliser une fonction récursive en PHP ou autre, en dehors de tout SQL.

Reply

Marsh Posté le 18-11-2002 à 17:51:44    

Sh@rdar a écrit a écrit :

si tu limites en niveaux de parents / enfants, quelques auto-jointures feront l'affaire, sinon.. non.




 
Tu m'étonnes, j'ai eu à faire ça à mon taf, dans un vieux langage, aucune boucle WHILE possible, obligé de prier pour qu'ils ne dépassent pas les 5 niveaux [:sisicaivrai]


Message édité par Fred999 le 18-11-2002 à 17:51:51
Reply

Marsh Posté le 18-11-2002 à 18:44:29    

Fred999 a écrit a écrit :

 
 
Tu m'étonnes, j'ai eu à faire ça à mon taf, dans un vieux langage, aucune boucle WHILE possible, obligé de prier pour qu'ils ne dépassent pas les 5 niveaux [:sisicaivrai]




 
Idem mais c t limité a 5 niveaux, la cette fois si c expandable :-)
 
Et oui je me suis penché sur une fonction recursive la :-)
Je crois que j ai peut etre pas choisit la meilleure solution comme fonction, mais au pire je l ameliorais

Reply

Marsh Posté le 18-11-2002 à 22:22:59    

si tu traites ça en php après un select * fais au moins un champ indexé conteant le niveau de chaque ligne.
 
 
comme ça tu pourras au moins trier tes résultats en partant du niveau le plus haut c'est toujours ça de gagné


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 19-11-2002 à 09:33:18    

Bon ca ca marche, mais je sais pas du tout si c'est fait proprement ou pas.
 

Code :
  1. function enfants($pere){
  2. $rq=mysql_query("select nom_struct, pere_direct from str where pere_direct='$pere' order by nom_struct" );
  3. while($res=mysql_fetch_array($rq)) {
  4.  echo "$res[0].$res[1]<br>";
  5.  enfants($res[0]);
  6. }
  7. return 1;
  8. }


enfants('RG00001';);

Reply

Marsh Posté le 19-11-2002 à 09:44:24    

J ai trouve mieux, le connect by prior mais je sens que mysql ne va aps connaitre ca

Reply

Marsh Posté le 19-11-2002 à 09:44:24   

Reply

Marsh Posté le 19-11-2002 à 10:21:10    

Sebastien a écrit a écrit :

J ai trouve mieux, le connect by prior mais je sens que mysql ne va aps connaitre ca




 
Ca sert à quoi, ce truc ?
 
Pourquoi tu ne fais pas, comme je disais, un SELECT * pour construire un tableau associatif que tu parcours ensuite récursivement ? Ca te permettrait d'optimiser le nombre de requêtes (tu n'en feras jamais qu'une seule).


Message édité par _Mac_ le 19-11-2002 à 10:22:12
Reply

Marsh Posté le 19-11-2002 à 11:51:24    

http://wwwlsi.supelec.fr/www/yb/po [...] ly_42.html
 
ET je t avoue que je sais pas trop comment m y prendre pour la recursivité dans un tableau.
 
Je vais voir ca en reflichissant deux secondes je trouverais peut etre

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed