Bonjour,
J'ai un problème concernant le tri d'une arborescence. Je sais, je rabache certaienement, mais je n'ai pas trouvé de sujet analogue, ni dans les FAQ du site.
J'ai une table section composée comme suit :
id, identifiant de la section, INT(3), AUTO_INCREMENT;
lebel, libelle de la section;
#id_mere, identifiant de la section mère, présente dans la table.
Si une section n'a pas de mère, alors id_mere est à 0.
En gros, mes données s'organisent comme suit :
1 / Sec 1 / 0
2 / Sec 2 / 0
4 / Sec 1.1 / 1
5 / Sec 1.1.1 / 4
7 / Sec 1.2 / 1
8 / Sec 2.1 /2
Et je souhaiterais avoir le classement ci-dessous :
1 / Sec 1 / 0
4 / Sec 1.1 / 1
5 / Sec 1.1.1 / 4
7 / Sec 1.2 / 1
2 / Sec 2 / 0
8 / Sec 2.1 /2
J'ai bien trouvé une solution, mais peu plaisante :
- on SELECT d'abord les lignes avec id_mere = 0;
- pour chacune de ces lignes, on appelle une fonction qui va chercher les filles;
- pour chaque fille trouvée, on va appeler la même fonction (qui devient récursive) pour trouver les petites-filles...
Une solution peu pratique pour moi, car j'ai plusieurs traitements à faire pour la même requête. De plus, je pense que mon arbre ne sera pas très profond (profondeur max de 5).
Y aurait-il la possibilité d'avoir une requête unique qui fasse ce tri (dans le style d'un x-JOIN, ou d'un UNION peut-être)?
Ou ma solution est-elle la plus réaliste, et je dois alors faire autant de fonctions que de traitements?
Ma version de MySQL est 5.X, aussi je peux également faire des requêtes imbriquées.
Merci à vous.
erazkan
Partager