Je tente de stocker l'arborescence des messages comme table de fermeture sur MySQL. Principalement appris sur cette méthode de la présentation de Bill Karwin Models for hierarchical data. Le problème est: je veux trouver 3 nœuds racines distincts (= nœuds sans ancêtres), qui ont les nœuds les plus récents dans leurs arbres. NB! Même si un nœud racine a 10 nouveaux nœuds dans son sous-arbre, il ne compterait qu'une seule fois. Tous les nœuds ont leur temps de modification, pour la simplicité disons que les identifiants de nœuds représentent aussi l'heure de leur dernière modification (mais nous ne pouvons pas utiliser les identifiants dans les requêtes comme temps), le premier est le 1er et le dernier est le 17ème.Comment trouver des racines-nœuds distincts des nœuds les plus récents dans les arbres (tenir dans la table de fermeture)?
1
2
8
15
16
17
7
3
4
5
6
9
12
10
14
11
13
Dans le tableau de fermeture i have 3 colonnes (ancêtre, descendant, profondeur), de sorte que l'arbre est présenté comme ça:
| ancestor | descendant | depth |
+----------+------------+-------+
| 1 | 1 | 0 |
| 1 | 2 | 1 |
| 1 | 7 | 1 |
| 1 | 8 | 2 |
| 1 | 15 | 3 |
| 1 | 16 | 3 |
| 1 | 17 | 2 |
| 2 | 2 | 0 |
| 2 | 8 | 1 |
| 2 | 15 | 2 |
| 2 | 16 | 2 |
| 2 | 17 | 1 |
| 3 | 3 | 0 |
| 3 | 4 | 1 |
| 3 | 5 | 2 |
| 3 | 6 | 1 |
| 4 | 4 | 0 |
| 4 | 5 | 1 |
| 5 | 5 | 0 |
| 6 | 6 | 0 |
| 7 | 7 | 0 |
| 8 | 8 | 0 |
| 8 | 15 | 1 |
| 8 | 16 | 1 |
| 9 | 9 | 0 |
| 9 | 12 | 1 |
| 10 | 10 | 0 |
| 10 | 14 | 1 |
| 11 | 11 | 0 |
| 11 | 13 | 1 |
| 12 | 12 | 0 |
| 13 | 13 | 0 |
| 14 | 14 | 0 |
| 15 | 15 | 0 |
| 16 | 16 | 0 |
| 17 | 17 | 0 |
je pourrais obtenir les plus récents sous-arbres comme ça:
SELECT c.ancestor, MAX(time) AS t
FROM closure c
JOIN nodes n ON (c.descendant = n.node AND c.ancestor <> n.node)
GROUP BY c.ancestor ORDER BY t desc;
Mais comment pourrais-je obtenir distinct 3 racine nœuds ayant des messages les plus récents (1, 10 et 11 dans ce cas)? Est-ce possible (et rationnel) avec une requête?
Edit: i mettre sample tables to pastebin
peut vous donner des données par exemple pour la Tabel nœuds? –