首页 > 解决方案 > 在同一张表中排序子/父

问题描述

我有一个 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          |
   .
   .
   .

首先是父母,然后是孩子。

有没有更好的解决方案来实现这个表?我需要一张包含家庭的表格

标签: mysqlsqlparent-childcoalesce

解决方案


coalesce()不起作用,因为父母是0. 您可以nullif()改用:

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

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


推荐阅读