У меня есть следующая таблица.Выбор дерева и упорядочение детей с помощью PostgreSQL
CREATE TABLE categories (
id integer serial primary key
parent_id integer
name text not null
ordering integer not null
);
Я хочу выделить все категории, но отступы имеют названия дочерних категорий и помещают дочерние категории под родителями. На том же уровне их следует заказать по телефону ordering
.
В настоящее время у меня есть следующий запрос, но возвращаемые дочерние категории находятся не в правильном порядке. Вместо этого они заказываются абсолютно, а не относительно их братьев и сестер.
WITH RECURSIVE recurse_categories(id, level, name, ordering) AS (
SELECT id, 0 AS level, name, ordering
FROM categories
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, level + 1, c.name, c.ordering
FROM categories AS c
JOIN recurse_categories rc
ON rc.id = c.parent_id
)
SELECT id, repeat('→', level) || ' ' || name AS name
FROM recurse_categories
ORDER BY ordering
Как я могу сделать заказ правильно?
Я использую PostgreSQL 9.2.4.
Я использовал 'массив [упорядочение], как ordering' и' rc.ordering || вместо этого. – rightfold
Да, это тоже можно сделать, это просто решение со строкой будет работать в других СУБД (например, SQL Server, у которых нет массивов) –