OVH Cloud OVH Cloud

SQL et descendants

2 réponses
Avatar
loufoque
Bonjour,
Je suis confronté à un problème en SQL, et j'aurais aimé savoir si il y
avait une solution élégante.

Je dispose de deux tables :
- messages, avec un champ id identifiant de façon unique un message (il
y aussi bien entendu d'autre champs comme le texte du message, son
auteur, son intitulé...)
- children, qui, pour chaque parent_id peut avoir aucun ou plusieurs
child_id.
parent_id et child_id sont les identifiants de deux messages (à priori
différents, sinon on risque d'avoir une récursion infinie) de la table
messages.

Je cherche à récupérer le message dont l'id est x ainsi que tous ses
descendants (pour réaliser un arbre ensuite avec un langage de
programmation), et ceci en un nombre de requêtes statiques.
En effet on pourrait récupérer le message dont l'id est x, puis ses
enfants, puis pour chaque enfant ses propres enfants, etc. J'essaie
néanmoins de diminuer le nombre de requêtes.

Petit exemple
messages : 1, 2, 3, 4, 5
children : (parent - enfant)
1 - 2
2 - 4
1 - 5

Si x = 1, je voudrais récupérer les messages 1, 2, 4 et 5.
Après il faudrait voir comment faire l'arbre à partir de ça...
(le langage de programmation serait PHP à priori, puisque People Hate Perl)

Alors si vous avez une solution (conforme à SQL99 si possible), ou même
une petite idée, et bien je vous prie de bien vouloir m'aider.
Merci d'avance.

2 réponses

Avatar
loufoque
Je tiens à signaler que j'ai trouvé un début de solution.
SQL ne colle pas trop pour modéliser les arbres de façon recursive,
alors je pense utiliser la méthode de représentation intervallaire
décrite dans l'article ci-lié.

http://sql.developpez.com/arborescence/

Il me reste encore à obtenir le flux XML comme à la fin mais sans les
procédures stockées, vues et WITH
(j'essaie d'être compatible MySQL...)
Avatar
td
fais passer un jeux de test .....

loufoque wrote:

Bonjour,
Je suis confronté à un problème en SQL, et j'aurais aimé savoir si il y
avait une solution élégante.

Je dispose de deux tables :
- messages, avec un champ id identifiant de façon unique un message (il
y aussi bien entendu d'autre champs comme le texte du message, son
auteur, son intitulé...)
- children, qui, pour chaque parent_id peut avoir aucun ou plusieurs
child_id.
parent_id et child_id sont les identifiants de deux messages (à priori
différents, sinon on risque d'avoir une récursion infinie) de la table
messages.

Je cherche à récupérer le message dont l'id est x ainsi que tous ses
descendants (pour réaliser un arbre ensuite avec un langage de
programmation), et ceci en un nombre de requêtes statiques.
En effet on pourrait récupérer le message dont l'id est x, puis ses
enfants, puis pour chaque enfant ses propres enfants, etc. J'essaie
néanmoins de diminuer le nombre de requêtes.

Petit exemple
messages : 1, 2, 3, 4, 5
children : (parent - enfant)
1 - 2
2 - 4
1 - 5

Si x = 1, je voudrais récupérer les messages 1, 2, 4 et 5.
Après il faudrait voir comment faire l'arbre à partir de ça...
(le langage de programmation serait PHP à priori, puisque People Hate Perl)

Alors si vous avez une solution (conforme à SQL99 si possible), ou même
une petite idée, et bien je vous prie de bien vouloir m'aider.
Merci d'avance.