Walczę cały dzień i nie mogę sobie poradzić. Jest sobie taka tabela:
+-------+-----------+-----------+
| Id | Number | Parent |
+-------+-----------+-----------+
| 1 | 1 | 0 |
+-------+-----------+-----------+
| 2 | 2 | 0 |
+-------+-----------+-----------+
| 3 | 3 | 0 |
+-------+-----------+-----------+
| 4 | 1.1 | 1 |
+-------+-----------+-----------+
| 5 | 1.2 | 1 |
+-------+-----------+-----------+
| 6 | 2.1 | 2 |
+-------+-----------+-----------+
| 7 | 3.1 | 3 |
+-------+-----------+-----------+
| 8 | 3.2 | 3 |
+-------+-----------+-----------+
| 9 | 3.3 | 3 |
+-------+-----------+-----------+
| 10 | 1.2.1 | 5 |
+-------+-----------+-----------+
| 11 | 1.2.2 | 5 |
+-------+-----------+-----------+
| 12 | 1.2.3 | 5 |
+-------+-----------+-----------+
| 13 | 3.2.1 | 8 |
+-------+-----------+-----------+
| 14 | 3.2.2 | 8 |
+-------+-----------+-----------+
| 15 | 3.2.2.1 | 14 |
+-------+-----------+-----------+
Potrzebuję wydobyć z niej dane w formie zgodnej z hierarchią, czyli:
+-------+-----------+-----------+-------+
| Id | Name | Parent | Lvl |
+-------+-----------+-----------+-------+
| 1 | 1 | 0 | 0 |
+-------+-----------+-----------+-------+
| 4 | 1.1 | 1 | 1 |
+-------+-----------+-----------+-------+
| 5 | 1.2 | 1 | 1 |
+-------+-----------+-----------+-------+
| 10 | 1.2.1 | 5 | 2 |
+-------+-----------+-----------+-------+
| 11 | 1.2.2 | 5 | 2 |
+-------+-----------+-----------+-------+
| 12 | 1.2.3 | 5 | 2 |
+-------+-----------+-----------+-------+
| 2 | 2 | 0 | 0 |
+-------+-----------+-----------+-------+
| 6 | 2.1 | 2 | 1 |
+-------+-----------+-----------+-------+
| 3 | 3 | 0 | 0 |
+-------+-----------+-----------+-------+
| 7 | 3.1 | 3 | 1 |
+-------+-----------+-----------+-------+
| 8 | 3.2 | 3 | 1 |
+-------+-----------+-----------+-------+
| 13 | 3.2.1 | 8 | 2 |
+-------+-----------+-----------+-------+
| 14 | 3.2.2 | 8 | 2 |
+-------+-----------+-----------+-------+
| 15 | 3.2.2.1 | 14 | 3 |
+-------+-----------+-----------+-------+
| 9 | 3.3 | 3 | 1 |
+-------+-----------+-----------+-------+
Poszukałem, pokopałem, stworzyłem takie coś:
WITH recursive_CTE
AS
(
SELECT Id, Name, Parent, 0 AS Lvl
FROM test
WHERE Parent = 0
UNION ALL
SELECT T.Id, T.Name, T.Parent, Lvl + 1
FROM test T INNER JOIN recursive_CTE R
ON T.Parent = R.Id
)
SELECT * FROM recursive_CTE
W wyniku dostaję to:
+-------+-----------+-----------+-------+
| Id | Name | Parent | Lvl |
+-------+-----------+-----------+-------+
| 1 | 1 | 0 | 0 |
+-------+-----------+-----------+-------+
| 2 | 2 | 0 | 0 |
+-------+-----------+-----------+-------+
| 3 | 3 | 0 | 0 |
+-------+-----------+-----------+-------+
| 7 | 3.1 | 3 | 1 |
+-------+-----------+-----------+-------+
| 8 | 3.2 | 3 | 1 |
+-------+-----------+-----------+-------+
| 9 | 3.3 | 3 | 1 |
+-------+-----------+-----------+-------+
| 13 | 3.2.1 | 8 | 2 |
+-------+-----------+-----------+-------+
| 14 | 3.2.2 | 8 | 2 |
+-------+-----------+-----------+-------+
| 15 | 3.2.2.1 | 14 | 3 |
+-------+-----------+-----------+-------+
| 6 | 2.1 | 2 | 1 |
+-------+-----------+-----------+-------+
| 4 | 1.1 | 1 | 1 |
+-------+-----------+-----------+-------+
| 5 | 1.2 | 1 | 1 |
+-------+-----------+-----------+-------+
| 10 | 1.2.1 | 5 | 2 |
+-------+-----------+-----------+-------+
| 11 | 1.2.2 | 5 | 2 |
+-------+-----------+-----------+-------+
| 12 | 1.2.3 | 5 | 2 |
+-------+-----------+-----------+-------+
Czyli nie do końca ta kolejność której potrzebuję. Jak to ugryźć żeby wynik był zgodnie z zagłębieniem?