在同一个 table 中排序 child / parent
sort child / parent in same table
我有一个 MySQL table 如下:
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`
所有 child 已排序,但 parent 未排序。
我想要这个结果:
member_id | name | parent |....
2 | alex | 0 |
1 | john | 0 |
3 | nikita | 1 |
4 | sarah | 1 |
.
.
.
先 parents 然后 childs.
是否有更好的解决方案来实现此 table?
我需要一个包含家庭
的 table
coalesce()
不起作用,因为父项是 0
。您可以使用 nullif()
代替:
ORDER BY COALESCE(NULLIF(parent, 0), member_id),
(parent = 0) DESC,
member_id
请注意,我使用 (parent = 0) DESC
作为第二个键。我更喜欢先表达我们想要的 匹配项 的逻辑,DESC
将真值放在假值之前。
我有一个 MySQL table 如下:
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`
所有 child 已排序,但 parent 未排序。
我想要这个结果:
member_id | name | parent |....
2 | alex | 0 |
1 | john | 0 |
3 | nikita | 1 |
4 | sarah | 1 |
.
.
.
先 parents 然后 childs.
是否有更好的解决方案来实现此 table? 我需要一个包含家庭
的 tablecoalesce()
不起作用,因为父项是 0
。您可以使用 nullif()
代替:
ORDER BY COALESCE(NULLIF(parent, 0), member_id),
(parent = 0) DESC,
member_id
请注意,我使用 (parent = 0) DESC
作为第二个键。我更喜欢先表达我们想要的 匹配项 的逻辑,DESC
将真值放在假值之前。