我有下表。
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。