sql >> Databasteknik >  >> RDS >> PostgreSQL

Sortera träd med en materialiserad stig?

Jag tror att din materialiserade väg inte är rätt.

Vilken logik får man för att sortera sånt här

1
1.2
1
1.5

Varför är den andra 1 inte tillsammans med den första?

Om du hade

1
1.2
2
2.5

Detta skulle vara trivialt.

EDIT:Jag har tittat på ditt exempel och du lagrar inte materialiserad bana för en rad, utan du lagrar en materialiserad bana för den överordnade raden. Här är hur den materialiserade banan för raden faktiskt ska se ut. Att sortera direkt på matbanan skulle fungera om du inte skulle ha fler än 9 grenar om du lagrade det som:

 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

annars (>9) skulle du behöva vända matpath till något liknande

001.002.006
001.002.006.008

som skulle stödja upp till 999 filialer.

Observera

  • även metoden med fyra fasta siffror, som 0001.0002.0006 skulle ge dig ett fält som är kortare än i det accepterade svaret
  • du kan analysera matpath och producera sorteringsvärde i farten med en användarfunktion
  • du kan direkt lagra matpath i det här formatet (det har några andra trevliga egenskaper också)


  1. Tabell-värderade funktioner i ORACLE 11g ? (parameteriserade vyer)

  2. JSON_OBJECTAGG() Funktion i Oracle

  3. Bästa tillvägagångssätt för grupperade löpande summor

  4. Hur konfigurerar man postgresql för första gången?