[MySQL] récupérer le premier élément d'une structure hiérarchique...

récupérer le premier élément d'une structure hiérarchique... [MySQL] - PHP - Programmation

Marsh Posté le 02-10-2003 à 15:46:27    

Mon sujet n'est pas clair, normal :D
 
en fait c'est très simple mais je ne sais pas comment l'expliquer en une phrase.
 
soit la table "rubrique" suivante :
 
id : INT auto-incrément, unique
rub : INT
txt : TEXT
 
et le début de la table suivant :
 
id       rub      txt
 
1        0        rubrique 1
2        0        rubrique 2
3        1        sous-rubrique 1 de la rubrique 1
4        1        sous-rubrique 2 de la rubrique 1
5        1        sous-rubrique 3 de la rubrique 1
6        2        sous-rubrique 1 de la rubrique 2
 
et ainsi de suite où le premier chiffre est l'id unique de chaque rubrique et le deuxième l'id de la rubrique qui la contient.
 
 
ce que j'aimerais faire, c'est pour un id donné récupérer l'id de la toute première rubrique.
 
Par exemple pour la rubrique 6 ça me donnerait 2 (là c'est facile il n'y en a que 2, mais pour la rubrique 429 ça se corse)
 
 
je sais le faire en utilisant toujours la même requête de manière récursive, mais est-ce possible avec une seule requête???
 
 
PS : j'utilise MySQL 3.23.49


Message édité par duch le 02-10-2003 à 15:50:34
Reply

Marsh Posté le 02-10-2003 à 15:46:27   

Reply

Marsh Posté le 03-10-2003 à 01:22:27    

j'ai pas tout compris! [:_maximus_]
 
un simple select te donne la rubrique associée... pour avoir la premiere tu joues avec les order by...


Message édité par _maximus_ le 03-10-2003 à 01:22:53

---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 03-10-2003 à 08:49:15    

en théorie, tu devrais avoir 2 tables. une rubrique, une sous rubrique en 1,n
 
ça peut t'éviter de te prendre la tête...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 03-10-2003 à 09:01:05    

le problème est que je n'ai pas qu'une seule sous rubrique, je peux avoir 5,8,10,20... rubriques imbriquées, donc le fait d'avoir 2 tables n'y change rien.
 
la question est quand je suis dans la 20è sous-rubrique d'une rubrique, comment connaitre l'id de cette rubrique sans faire 20 select?

Reply

Marsh Posté le 03-10-2003 à 12:08:57    

duch a écrit :

le problème est que je n'ai pas qu'une seule sous rubrique, je peux avoir 5,8,10,20... rubriques imbriquées, donc le fait d'avoir 2 tables n'y change rien.
 
la question est quand je suis dans la 20è sous-rubrique d'une rubrique, comment connaitre l'id de cette rubrique sans faire 20 select?


 
Avec 2 tables tu selectionnes en un seul select...


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 03-10-2003 à 12:42:53    

_Maximus_ a écrit :


 
Avec 2 tables tu selectionnes en un seul select...  


 
Je ne vois pas comment, à moins de stocker le "chemin" complet de la sous-rubrique dedans.
 
Et à ce moment là tu peux aussi le faire dans la même table.
 
Genre chemin = "rub01-ele01\rub04-ele02\rub09-ele04".
 
Sinon faut faire du récursif?


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 03-10-2003 à 13:04:13    

Freekill a écrit :


 
Je ne vois pas comment, à moins de stocker le "chemin" complet de la sous-rubrique dedans.
 
Et à ce moment là tu peux aussi le faire dans la même table.
 
Genre chemin = "rub01-ele01\rub04-ele02\rub09-ele04".
 
Sinon faut faire du récursif…


 
 
select * from table1, table2 WHERE table1.idrub=table2.idrub;
 
un truc du style


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 03-10-2003 à 13:07:58    

_Maximus_ a écrit :


 
 
select * from table1, table2 WHERE table1.idrub=table2.idrub;
 
un truc du style


 
Je pense que tu n'as pas tout suivi : il veut remonter jusqu'à la racine de l'arborescence, avec un nombre indéterminé de sous-rubriques entre celle-ci et la sous-rubrique choisie.


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 03-10-2003 à 14:47:55    

Ben il faut faire une fonction récursive qui remonte l'arbre, y'a pas d'autre méthode.

Reply

Marsh Posté le 03-10-2003 à 14:53:12    

Betcour a écrit :

Ben il faut faire une fonction récursive qui remonte l'arbre, y'a pas d'autre méthode.


 
Si, stocker le chemin?  :sarcastic:


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 03-10-2003 à 14:53:12   

Reply

Marsh Posté le 03-10-2003 à 20:44:21    

Freekill a écrit :


 
Je pense que tu n'as pas tout suivi : il veut remonter jusqu'à la racine de l'arborescence, avec un nombre indéterminé de sous-rubriques entre celle-ci et la sous-rubrique choisie.


 
 
Ahhhhhhhhhhh ok....
Bon ben autant pour moi...
 
sinon oui le recursif est une solution.
 
Mais perso je vois pas l'interet d'avoir plus de 3, max 4 sous section dans un site...  
 
Perso je m'en sort toujours avec 2, rarement 3.
 
Donc  a quoi bon faire du recursif pour si peut, ca allourdi mechament le code, je pense...
 
a+


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 04-10-2003 à 13:45:26    

ça n'est pas pour un site...
 
mais si y'a pas d'autre moyen que le récursif, tant pis :(

Reply

Marsh Posté le 04-10-2003 à 13:51:07    

Si tu te pose la question pour un niveau intermédiaire, pas d'autre solution que la récursion ou le stockage du chemin complet.
 
Mais si, pour une sous rubrique de niveau N, tu ne te pose que la question de savoir quelle est la rubrique de niveau 1, la solution est simple : Ajouter un champs Racine.
 
id : INT auto-incrément, unique  
rub : INT  
racine : INT
txt : TEXT  
 
et le début de la table suivant :  
 
id       rub      racine     txt  
 
1        0        0          rubrique 1  
2        0        0          rubrique 2  
3        1        0          sous-rubrique 1 de la rubrique 1  
4        1        0          sous-rubrique 2 de la rubrique 1  
5        2        2          sous-rubrique 1 de la rubrique 2
6        5        2          sous-rubrique 1 de la rubrique 5
 
Ce qui est un cas particulier du stockage du chemin complet :D


Message édité par Mara's dad le 04-10-2003 à 13:55:12

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

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