Credo che il tuo percorso materializzato non sia giusto.
Che logica hai per ordinare cose come questa
1
1.2
1
1.5
Perché il secondo 1 non è insieme al primo?
Se lo avessi
1
1.2
2
2.5
Sarebbe banale.
EDIT:ho esaminato il tuo esempio e non stai memorizzando il percorso materializzato di una riga, ma stai memorizzando un percorso materializzato della riga padre. Ecco come dovrebbe effettivamente apparire il percorso materializzato della riga. L'ordinamento direttamente su matpath funzionerebbe se non avessi più di 9 rami se lo avessi archiviato come:
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
altrimenti (>9) dovresti girare il matpath
in qualcosa come
001.002.006
001.002.006.008
che supporterebbe fino a 999 filiali.
Si prega di notare
- anche l'approccio con 4 cifre fisse, come
0001.0002.0006
ti darebbe un campo più corto della risposta accettata - potresti analizzare al volo matpath un valore di ordinamento dei prodotti con una funzione utente
- potresti memorizzare direttamente matpath in questo formato (ha anche altre proprietà interessanti)