我有一个包含三列的表,id,comment和parent。如果父id为null,则注释是根注释,如果不是,则表示注释是对另一个注释的回复。我使用以下查询:
SELECT *
FROM `comment`
ORDER BY COALESCE( parent, id ) DESC
LIMIT 0 , 30
此查询会根据其回复对最后插入的评论进行排序,但我不了解逻辑。为什么这样订购?
答案 0 :(得分:5)
COALESCE()
函数返回收到的first non-null argument。因此,如果您浏览每一行并比较父/ id列,您会看到它的排序如下:
7 (because parent is null)
2 (because parent is null)
2 (parent is not null, so it is used)
1 (because parent is null)
1 (parent is not null, so it is used)
1 (parent is not null, so it is used)
按照您的指定,按降序排列。
我怀疑这里可能会有些混乱。所以让我重申一下。 COALESCE(parent, id)
将返回 not null 中的第一个值。如果parent不为null,则返回它。如果为null,则返回id并返回该值。如果你并排查看这些行的列表并查看返回值,可能会更清楚:
| parent | id | return_value |
+--------+----+--------------+
| null | 7 | 7 |
| null | 2 | 2 |
| 2 | 4 | 2 |
| null | 1 | 1 |
| 1 | 3 | 1 |
| 1 | 5 | 1 |
| 1 | 6 | 1 |
答案 1 :(得分:0)
也许你的查询应该是
SELECT *
FROM `comment`
ORDER BY parent DESC, id DESC
LIMIT 0 , 30;
首先按父级排序(在整数后排序为NULL)
4653
然后
按ID按相反顺序排序
721
那会给出
4 6 五 3 7 2 1
这是你在找什么?