Bonjour,
j'ai un petit problème à vous soumettre. Soit un ensemble E d'objet représentés de façon biunivoque par des entiers, tels que chaque objet a un parent au plus ; les parents font eux-mêmes partie de E. On représente dans une table nommée 'Objets' à deux colonnes (id | parent_id) les liens de filiation entre les objets. L'objet numéroté id a comme objet parent celui représenté par parent_id. Ma question : comment récupérer, pour chaque objet, la suite d'entiers représentant ses 'aïeux' ?
J'ai une solution 'finie', en se disant, par exemple, qu'un objet n'a au plus que 2 aïeux :
Mais je me demande s'il y a plus malin et plus 'générique'... Quelqu'un aurait une idée ? Y a-t-il des fonctions "search" ou "find" qu'on puisse utiliser ? Je ne sais pas trop comment mieux prendre le problème, ne maîtrisant pas bien PostgreSQL...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 -- réplique de la table Objets CREATE TEMPORARY VIEW objets1 AS SELECT id AS parent1, parent_id AS parent_parent1 FROM Objets; -- réplique de la table Objets CREATE TEMPORARY VIEW objets2 AS SELECT id AS parent1, parent_id AS parent_parent2 FROM Objets; SELECT id, parent1, parent2 FROM Objets, objets1, objets2 WHERE Objets.parent_id = objets1.parent1 AND objets1.parent_parent1 = objets2.parent2;
Merci pour votre aide !
Partager