База данных — Мариадб. Итак, это моя таблица, и я хочу отсортировать ее по убыванию идентификатора, но с дочерними элементами всегда ниже родителя.
+----+-----------+--------------+--------+----------+
| id | firstName | favoriteFood | status | parentID |
+----+-----------+--------------+--------+----------+
| 1 | Andy | pizza | child | 5 |
| 2 | Alice | burger | child | 5 |
| 3 | Bob | fries | orphan | null |
| 4 | Barney | salad | parent | null |
| 5 | Christ | steak | parent | null |
| 6 | Daniel | pizza | child | 8 |
| 7 | Mike | fries | child | 5 |
| 8 | Richard | oatmeal | parent | null |
| 9 | Wilson | steak | child | 8 |
| 10 | Dicky | watermelon | orphan | null |
| 11 | Freya | potato | orphan | null |
| 12 | Ryan | oyster | parent | null |
| 13 | Alex | bread | orphan | null |
| 14 | Sarah | brocoli | child | 12 |
| 15 | Dane | toast | child | 8 |
+----+-----------+--------------+--------+----------+
Я попробовал это, но это не дало ожидаемого результата
SELECT * from table ORDER BY id DESC, FIELD(status,'parent','child'), parentID
и это мой ожидаемый результат, если это возможно:
+----+-----------+--------------+--------+----------+
| id | firstName | favoriteFood | status | parentID |
+----+-----------+--------------+--------+----------+
| 13 | Alex | bread | orphan | null |
| 12 | Ryan | oyster | parent | null |
| 14 | Sarah | brocoli | child | 12 |
| 11 | Freya | potato | orphan | null |
| 10 | Dicky | watermelon | orphan | null |
| 8 | Richard | oatmeal | parent | null |
| 15 | Dane | toast | child | 8 |
| 9 | Wilson | steak | child | 8 |
| 6 | Daniel | pizza | child | 8 |
| 5 | Christ | steak | parent | null |
| 7 | Mike | fries | child | 5 |
| 2 | Alice | burger | child | 5 |
| 1 | Andy | pizza | child | 5 |
| 4 | Barney | salad | parent | null |
| 3 | Bob | fries | orphan | null |
+----+-----------+--------------+--------+----------+


Учитывая, что у вас, похоже, не более одного уровня родительского/дочернего элемента, для этого вам не нужна рекурсия. Просто отсортируйте детей по родительскому элементу, но сначала по родительскому:
select MyTbl.*
from MyTbl
order by
coalesce(parentID,id) desc,
parentID is not null,
id desc
Ожидаемый результат не имеет смысла. Я не вижу ни одного отсортированного столбца. При сортировке по
id DESCсначала15будет помещен вверху, а1внизу. По чему вы сортируете, чтобы получить результат, который показываете?