récupérer le premier élément d'une structure hiérarchique... [MySQL] - PHP - Programmation
Marsh Posté le 03-10-2003 à 01:22:27
j'ai pas tout compris!
un simple select te donne la rubrique associée... pour avoir la premiere tu joues avec les order by...
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...
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?
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. |
Avec 2 tables tu selectionnes en un seul select...
Marsh Posté le 03-10-2003 à 12:42:53
_Maximus_ 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?
Marsh Posté le 03-10-2003 à 13:04:13
Freekill a écrit : |
select * from table1, table2 WHERE table1.idrub=table2.idrub;
un truc du style
Marsh Posté le 03-10-2003 à 13:07:58
_Maximus_ 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.
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.
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?
Marsh Posté le 03-10-2003 à 20:44:21
Freekill a écrit : |
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+
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
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
Marsh Posté le 02-10-2003 à 15:46:27
Mon sujet n'est pas clair, normal
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