Uważam, że Twoja zmaterializowana ścieżka nie jest właściwa.
Jaką masz logikę, aby sortować takie rzeczy
1
1.2
1
1.5
Dlaczego druga 1 nie jest razem z pierwszą?
Gdybyś miał
1
1.2
2
2.5
To byłoby trywialne.
EDYCJA:Przyjrzałem się twojemu przykładowi i nie przechowujesz zmaterializowanej ścieżki wiersza, ale przechowujesz zmaterializowaną ścieżkę wiersza nadrzędnego. Oto jak powinna wyglądać zmaterializowana ścieżka wiersza. Sortowanie bezpośrednio na matpath działałoby, gdybyś nie miał więcej niż 9 gałęzi, jeśli zapisałeś go jako:
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
w przeciwnym razie (>9) musiałbyś zmienić matpath
w coś takiego
001.002.006
001.002.006.008
które obsługuje do 999 oddziałów.
Uwaga
- nawet podejście z 4 stałymi cyframi, takie jak
0001.0002.0006
da ci pole, które jest krótsze niż w zaakceptowanej odpowiedzi - możesz przeanalizować matpath i wartość sortowania produktów w locie za pomocą funkcji użytkownika
- możesz bezpośrednio zapisać matpath w tym formacie (ma też kilka innych fajnych właściwości)