Вярвам, че материализираният ви път не е правилен.
Каква логика имаш да сортираш неща като това
1
1.2
1
1.5
Защо вторият 1 не е заедно с първия?
Ако имаше
1
1.2
2
2.5
Това би било тривиално.
РЕДАКТИРАНЕ:Разгледах вашия пример и вие не съхранявате материализиран път на ред, но съхранявате материализиран път на родителския ред. Ето как всъщност трябва да изглежда материализираният път на реда. Сортирането директно по matpath би работило, ако нямате повече от 9 клона, ако го съхраните като:
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
в противен случай (>9) ще трябва да включите matpath
в нещо като
001.002.006
001.002.006.008
който ще поддържа до 999 клона.
Моля, обърнете внимание
- дори подходът с 4 фиксирани цифри, като
0001.0002.0006
ще ви даде поле, което е по-кратко от приетия отговор - можете да анализирате matpath и стойност за сортиране на продукцията в движение с потребителска функция
- можете директно да съхранявате matpath в този формат (има и някои други хубави свойства)