сортировать ребенка / родителя в одной таблице - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть таблица MySQL, которая выглядит следующим образом:

member_id | name        | parent     |....
   1      | john        | 0          |
   2      | alex        | 0          |
   3      | nikita      | 1          |
   4      | sarah       | 1          |
   .
   .
   .

Я хочу отсортировать по parrent. я пробую это, но не работаю:

SELECT * FROM `members` ORDER BY COALESCE(`parrent`,`member_id`),`parrent` !=0,`member_id`

все дети отсортированы, но родитель не с ними.

я хочу этот результат:

member_id | name        | parent     |....
   2      | alex        | 0          |
   1      | john        | 0          |
   3      | nikita      | 1          |
   4      | sarah       | 1          |
   .
   .
   .

сначала родители, а затем childs.

Есть ли лучшее решение для реализации этой таблицы? Мне нужен стол, содержащий семьи

1 Ответ

2 голосов
/ 03 апреля 2020

coalesce() не работает, потому что родительский 0. Вы можете использовать nullif() вместо:

ORDER BY COALESCE(NULLIF(parent, 0), member_id),
        (parent = 0) DESC,
        member_id

Обратите внимание, что я использую (parent = 0) DESC для второй клавиши. Я предпочитаю от c до express совпадений , которые мы хотим сначала, с DESC для установки истинных значений перед ложными.

...