Как упорядочить данные в mysql как заданные

#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