Jag tror att din materialiserade väg inte är rätt.
Vilken logik får man för att sortera sånt här
1
1.2
1
1.5
Varför är den andra 1 inte tillsammans med den första?
Om du hade
1
1.2
2
2.5
Detta skulle vara trivialt.
EDIT:Jag har tittat på ditt exempel och du lagrar inte materialiserad bana för en rad, utan du lagrar en materialiserad bana för den överordnade raden. Här är hur den materialiserade banan för raden faktiskt ska se ut. Att sortera direkt på matbanan skulle fungera om du inte skulle ha fler än 9 grenar om du lagrade det som:
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
annars (>9) skulle du behöva vända matpath
till något liknande
001.002.006
001.002.006.008
som skulle stödja upp till 999 filialer.
Observera
- även metoden med fyra fasta siffror, som
0001.0002.0006
skulle ge dig ett fält som är kortare än i det accepterade svaret - du kan analysera matpath och producera sorteringsvärde i farten med en användarfunktion
- du kan direkt lagra matpath i det här formatet (det har några andra trevliga egenskaper också)