Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
652 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°247623
Sebastien
Posté le 18-11-2002 à 14:49:22  profilanswer
 

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
mood
Publicité
Posté le 18-11-2002 à 14:49:22  profilanswer
 

n°247626
Sebastien
Posté le 18-11-2002 à 14:50:58  profilanswer
 

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

n°247823
Fred999
Rabat-joie
Posté le 18-11-2002 à 17:23:54  profilanswer
 

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é :(

n°247831
Sh@rdar
Ex-PhPéteur
Posté le 18-11-2002 à 17:45:54  profilanswer
 

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
n°247832
_Mac_
Posté le 18-11-2002 à 17:47:44  profilanswer
 

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.

n°247833
Fred999
Rabat-joie
Posté le 18-11-2002 à 17:51:44  profilanswer
 

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
n°247886
Sebastien
Posté le 18-11-2002 à 18:44:29  profilanswer
 

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

n°248052
Sh@rdar
Ex-PhPéteur
Posté le 18-11-2002 à 22:22:59  profilanswer
 

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
n°248199
Sebastien
Posté le 19-11-2002 à 09:33:18  profilanswer
 

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';);

n°248201
Sebastien
Posté le 19-11-2002 à 09:44:24  profilanswer
 

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

mood
Publicité
Posté le 19-11-2002 à 09:44:24  profilanswer
 

n°248206
_Mac_
Posté le 19-11-2002 à 10:21:10  profilanswer
 

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
n°248261
Sebastien
Posté le 19-11-2002 à 11:51:24  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
Mysql et batchOOP : Créer objets de types distincts mais dérivés d'un type commun
[PHP/MYSQL] - alors la si qqun y comprends qque chose, CHAPO! [résolu]connaître le type
[MySQL] - Personnaliser le format de la date/heure dans une table?[MySQL] Passer en InnoDB ca marche pas
[MySQL] Commande permettant sortir les résultats par longueur.[MySQL] Comment faire une recherche dans toute la table ?
[MySQL] Probleme de selection en DESC dans la BDD ...MYSQL: la question con du jour...
Plus de sujets relatifs à : [mysql]requete de type arbre (rechercher n-peres]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR