Ik geloof dat je gematerialiseerde pad niet goed is.
Welke logica krijg je om dit soort dingen te sorteren
1
1.2
1
1.5
Waarom is de tweede 1 niet samen met de eerste?
Als je
1
1.2
2
2.5
Dit zou triviaal zijn.
EDIT:ik heb naar je voorbeeld gekeken en je slaat geen gematerialiseerd pad van een rij op, maar je slaat een gematerialiseerd pad van de bovenliggende rij op. Hier is hoe het gematerialiseerde pad van de rij er eigenlijk uit zou moeten zien. Rechtstreeks sorteren op matpath zou werken als je niet meer dan 9 takken zou hebben als je het opsloeg als:
id | parent_id | matpath | created
----+-----------+-----------+----------------------------
2 | 1 | 1.2 | 2010-05-08 15:18:37.987544
6 | 2 | 1.2.6 | 2010-05-08 17:50:43.288759
8 | 6 | 1.2.6.8 | 2010-05-09 14:01:17.632695
3 | 1 | 1.3 | 2010-05-08 17:38:14.125377
4 | 1 | 1.4 | 2010-05-08 17:38:57.26743
5 | 1 | 1.5 | 2010-05-08 17:43:28.211708
9 | 5 | 1.5.9 | 2010-05-09 14:02:43.818646
7 | 1 | 1.7 | 2010-05-08 18:18:11.849735
anders (>9) zou je de matpath
. moeten omdraaien in iets als
001.002.006
001.002.006.008
dat zou tot 999 vestigingen ondersteunen.
Let op
- zelfs de benadering met 4 vaste cijfers, zoals
0001.0002.0006
zou u een veld geven dat korter is dan in het geaccepteerde antwoord - u kunt matpath en sorteerwaarde voor producten on-the-fly ontleden met een gebruikersfunctie
- je zou matpath direct in dit formaat kunnen opslaan (het heeft ook een aantal andere leuke eigenschappen)