Mysql 对同一表中的子级/父级进行排序

Mysql 对同一表中的子级/父级进行排序,mysql,sql,parent-child,coalesce,Mysql,Sql,Parent Child,Coalesce,我有一个MySQL表,如下所示: member_id | name | parent |.... 1 | john | 0 | 2 | alex | 0 | 3 | nikita | 1 | 4 | sarah | 1 | . . . 我想使用parrent进行排序。 我

我有一个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          |
   .
   .
   .
先是父母,然后是孩子

是否有更好的解决方案来实现此表? 我需要一个包含族的表

coalesce()
不起作用,因为父项是
0
。您可以改用
nullif()

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

请注意,我对第二个键使用了
(parent=0)DESC
。我喜欢先用逻辑来表示我们想要的匹配,用
DESC
将真值放在假值之前。

您有两个不同的引用。它应该是
parent
还是
parrent
?你能展示你想要的结果吗?我在你的样本数据中没有看到空值,coalesce()是怎么来的?我在帖子中解释了我想要的结果。我通常需要一张包括families@FarzadKamali . . . 我明白了<代码>最大()。您需要
NULLIF()
CASE
表达式。