Acredito que seu caminho materializado não está certo.
Que lógica você tem para classificar coisas assim
1
1.2
1
1.5
Por que o segundo 1 não está junto com o primeiro?
Se você tinha
1
1.2
2
2.5
Isso seria banal.
EDIT:Eu olhei para o seu exemplo e você não está armazenando o caminho materializado de uma linha, mas você está armazenando um caminho materializado da linha pai. Veja como o caminho materializado da linha realmente deve se parecer. Classificar diretamente no matpath funcionaria se você não tivesse mais de 9 branches se o armazenasse como:
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
caso contrário (>9) você teria que ativar o
matpath
em algo como 001.002.006
001.002.006.008
que suportaria até 999 filiais.
Observe
- até mesmo a abordagem com 4 dígitos fixos, como
0001.0002.0006
daria a você um campo menor do que na resposta aceita - você pode analisar matpath e produzir um valor de classificação em tempo real com uma função de usuário
- você pode armazenar diretamente o matpath neste formato (ele também tem outras propriedades interessantes)