Получение полной иерархии, отсортированной по столбцу в модуле Ltree PostgreSQL

Я использую модуль PostgreSQL Ltree для хранения иерархических данных. Я хочу получить полную иерархию, отсортированную по определенному столбцу.

Рассмотрим следующую таблицу:

  votes | path  | ...
 -------+-------+-----
      1 | 1     | ...
      2 | 1.1   | ...
      4 | 1.2   | ...
      1 | 1.2.1 | ...
      3 | 2     | ...
      1 | 2.1   | ...
      2 | 2.1.1 | ...
      4 | 2.1.2 | ...
    ... | ...   | ...

В моей текущей реализации я бы запросил базу данных с помощью SELECT * FROM comments ORDER BY path , который вернет все дерево:

Node 1
-- Node 1.1
-- Node 1.2
---- Node 1.2.1
Node 2
-- Node 2.1
---- Node 2.1.1
---- Node 2.1.2

Однако я хотите отсортировать по голосам (а не по id , к чему сводится сортировка по пути ). Каждый уровень глубины должен быть независимо отсортирован, при этом правильная древовидная структура должна оставаться неизменной. Что-то, что вернет следующее:

Node 2
-- Node 2.1
---- Node 2.1.2
---- Node 2.1.1
Node 1
-- Node 1.2
---- Node 1.2.1
-- Node 1.1

Postgres ' WITH RECURSIVE может быть подходящим, но я не уверен. Есть идеи?

9
задан Cœur 22 January 2017 в 05:22
поделиться