Ich glaube, Ihr materialisierter Pfad ist nicht richtig.
Welche Logik haben Sie, um solche Dinge zu sortieren?
1
1.2
1
1.5
Warum ist die zweite 1 nicht zusammen mit der ersten?
Wenn Sie
1
1.2
2
2.5
Das wäre trivial.
BEARBEITEN:Ich habe mir Ihr Beispiel angesehen und Sie speichern keinen materialisierten Pfad einer Zeile, sondern einen materialisierten Pfad der übergeordneten Zeile. So sollte der materialisierte Pfad der Zeile tatsächlich aussehen. Das direkte Sortieren auf Matpath würde funktionieren, wenn Sie nicht mehr als 9 Zweige hätten, wenn Sie es speichern als:
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
andernfalls (>9) müssten Sie den matpath
umdrehen in so etwas wie
001.002.006
001.002.006.008
das würde bis zu 999 Verzweigungen unterstützen.
Bitte beachten
- sogar der Ansatz mit 4 festen Ziffern, wie zB
0001.0002.0006
würde Ihnen ein Feld geben, das kürzer ist als in der akzeptierten Antwort - Sie könnten matpath parsen und mit einer Benutzerfunktion spontan einen Sortierwert erzeugen
- Sie könnten matpath direkt in diesem Format speichern (es hat auch einige andere nette Eigenschaften)