Скажем, у меня есть таблица базы данных teams
, в которой есть столбец порядка position
, позиция может быть null
, если это последний результат, или идентификатор следующего team
, который расположен на единицу выше, чем эта команда. Это приведет к тому, что список будет всегда строго отсортирован (если вы используете целые числа, вам нужно управлять всеми другими значениями позиции при вставке нового team
, то есть увеличивать их все на единицу), и вставка становится менее сложной ...
Но получить эту таблицу в виде отсортированного запроса оказалось непросто, вот где я сейчас нахожусь:
WITH RECURSIVE teams AS (
SELECT *, 1 as depth FROM team
UNION
SELECT t.*, ts.depth + 1 as depth
FROM team t INNER JOIN teams ts ON ts.order = t.id
SELECT
id, order, depth
FROM
teams
;
Что дает мне что-то вроде:
id | order | depth
----+-------+-------
53 | 55 | 1
55 | 52 | 1
55 | 52 | 2
52 | 54 | 2
52 | 54 | 3
54 | | 3
54 | | 4
Какой вид отражает, куда мне нужно попасть с точки зрения упорядочения (максимальная глубина соответствует порядку, который я хочу ...), однако я не могу понять, как изменить запрос, чтобы получить что-то вроде:
id | order | depth
----+-------+-------
53 | 55 | 1
55 | 52 | 2
52 | 54 | 3
54 | | 4
Однако, похоже, я меняю запрос, который мне жаловался на применение GROUP BY
как к id
, так и к depth
... Как мне добраться из того места, где я сейчас нахожусь, туда, где я хочу быть?