#mysql #mariadb
#mysql #mariadb
Вопрос:
Как отсортировать строки этой таблицы таким образом, чтобы pid следующей строки был равен предыдущему идентификатору строки
ID | Имя | пид |
---|---|---|
1 | строка 1 | НУЛЕВОЙ |
2 | row2 | 5 |
3 | строка 3 | 2 |
4 | строка 4 | 1 |
5 | строка 5 | 4 |
6 | строка 6 | 3 |
Для
ID | Имя | пид |
---|---|---|
1 | строка 1 | НУЛЕВОЙ |
4 | строка 4 | 1 |
5 | строка 5 | 4 |
2 | row2 | 5 |
3 | строка 3 | 2 |
6 | строка 6 | 3 |
Комментарии:
1. Используйте рекурсивный CTE для перечисления. Но данные не должны содержать пробелов или циклов (которые не могут быть предоставлены подсистемой проверки согласованности СУБД и должны поддерживаться клиентской логикой).
Ответ №1:
WITH RECURSIVE
cte AS ( SELECT id, name, pid, 1 level
FROM table
WHERE pid IS NULL
UNION ALL
SELECT table.id, table.name, table.pid, cte.level 1
FROM table
JOIN cte ON table.pid = cte.id )
SELECT id, name, pid
FROM cte
ORDER BY level