【问题标题】:sort child / parent in same table在同一张表中排序子/父
【发布时间】:2020-04-03 14:15:43
【问题描述】:

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

先做父母,再做孩子。

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

【问题讨论】:

  • 您有 2 个不同的参考。是parent 还是parrent?
  • 你能显示你想要的结果吗,
  • 我在你的样本数据中没有看到空值,怎么来的 coalesce()?
  • 我在帖子中解释了我想要的结果。我通常需要一张包含家庭的表格

标签: mysql sql parent-child coalesce


【解决方案1】:

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

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

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

【讨论】:

  • @FarzadKamali 。 . .我看到。 GREATEST() 并非在所有情况下都有效。您需要 NULLIF() 或 CASE 表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多