PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Sortierbaum mit einem materialisierten Pfad?

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)