Creo que tu camino materializado no es el correcto.
¿Qué lógica obtienes para ordenar cosas como esta?
1
1.2
1
1.5
¿Por qué el segundo 1 no está junto con el primero?
Si tuvieras
1
1.2
2
2.5
Esto sería trivial.
EDITAR:he visto su ejemplo y no está almacenando la ruta materializada de una fila, pero está almacenando una ruta materializada de la fila principal. Así es como debería verse realmente la ruta materializada de la fila. Ordenar directamente en matpath funcionaría si no tuviera más de 9 ramas si lo almacenara 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
de lo contrario (>9) tendrías que convertir el matpath
en algo como
001.002.006
001.002.006.008
eso admitiría hasta 999 sucursales.
Tenga en cuenta
- incluso el enfoque con 4 dígitos fijos, como
0001.0002.0006
le daría un campo que es más corto que en la respuesta aceptada - podría analizar matpath y producir un valor de clasificación sobre la marcha con una función de usuario
- podría almacenar matpath directamente en este formato (también tiene algunas otras propiedades agradables)