mysql - 对同一个表中的子/父进行排序

标签 mysql sql parent-child coalesce

我有一个 MySQL 表,如下所示:

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

我想与parent一起排序。 我尝试了这个但不起作用:

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

所有 child 都已排序,但 parent 没有和他们在一起。

我想要这个结果:

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

首先是 parent ,然后是 child 。

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

最佳答案

coalesce() 不起作用,因为父级是 0。您可以使用 nullif() 代替:

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

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

关于mysql - 对同一个表中的子/父进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61013867/

相关文章:

mysql - 按 id 排名前 20% - MySQL

MySQL 更新和插入语句

php - 神秘幽灵MySQL插入查询

django - 多个模型 - 一个公共(public)主键 (Django)

actionscript-3 - AS3 阶段 = 空?

mysql - SQL更新除属于特定表的记录之外的所有记录

php - 函数返回错误响应

sql - 使用 Postgres 时为 "Operator does not exist: integer =?"

sql - 在 SQL Server 2012 中使用 MERGE 插入/更新数据

javascript - 通过 JavaScript 将值从父窗体传递到 .NET 控件。 Gridview 从 window.opener 选择参数