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