PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sortowanie drzewa ze zmaterializowaną ścieżką?

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozplątanie aktualizacji PostgreSQL

  2. Zliczanie liczby wystąpień podciągu w ciągu w PostgreSQL

  3. Jak debugować procedury składowane postgresql?

  4. Zapobiegaj wyzwalaniu rekurencyjnemu w PostgreSQL

  5. ECONNREFUSED dla Postgres na nodeJS z dokerami