sql >> Database >  >> RDS >> PostgreSQL

Boom sorteren met een gematerialiseerd pad?

Ik geloof dat je gematerialiseerde pad niet goed is.

Welke logica krijg je om dit soort dingen te sorteren

1
1.2
1
1.5

Waarom is de tweede 1 niet samen met de eerste?

Als je

1
1.2
2
2.5

Dit zou triviaal zijn.

EDIT:ik heb naar je voorbeeld gekeken en je slaat geen gematerialiseerd pad van een rij op, maar je slaat een gematerialiseerd pad van de bovenliggende rij op. Hier is hoe het gematerialiseerde pad van de rij er eigenlijk uit zou moeten zien. Rechtstreeks sorteren op matpath zou werken als je niet meer dan 9 takken zou hebben als je het opsloeg 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

anders (>9) zou je de matpath . moeten omdraaien in iets als

001.002.006
001.002.006.008

dat zou tot 999 vestigingen ondersteunen.

Let op

  • zelfs de benadering met 4 vaste cijfers, zoals 0001.0002.0006 zou u een veld geven dat korter is dan in het geaccepteerde antwoord
  • u kunt matpath en sorteerwaarde voor producten on-the-fly ontleden met een gebruikersfunctie
  • je zou matpath direct in dit formaat kunnen opslaan (het heeft ook een aantal andere leuke eigenschappen)


  1. Een door komma's gescheiden waarde in kolommen splitsen

  2. Onbewerkte SQL-querystring ophalen uit door PDO voorbereide instructies

  3. Hoe inactieve verbindingen in PostgreSQL automatisch te sluiten?

  4. Hoe de CONCAT()-functie werkt in PostgreSQL