有一个包含 4 个字段的简单表:id(int)、text(text)、parent_id(int)、date_x(timestamp)
id date
--- ----------------
1 2017-04-29 18:01:03
2 2016-03-28 18:01:03
3 2015-04-27 18:01:03
说清楚,文章/消息存储在表中,这些文章可以被评论,所以新鲜的文章应该在列表的顶部,而新鲜的评论则相反,在底部。这个查询确实不行:
SELECT id, articles.text, parent_id, articles.date FROM articles ORDER BY articles.date, id DESC
我还尝试使用 UNION 组合 2 个查询,例如,if parent_id > 0 (comment) then DESC and if parent = 0 (article) then ASC,但也无济于事
可以按附加计算列排序。
例如,对于您的情况,函数返回的日期和时间的数字表示是合适的
unix_timestamp()。和要添加的条件 - 如果某某列的值等于零,则返回负值。示例(附加列 -
d2):SQL小提琴
MySQL 5.6 架构设置:
查询 1:
结果:
原则上,您甚至可以通过直接在中指定所需的条件来不使用列
order by:SQL小提琴
MySQL 5.6 架构设置:
查询 1:
结果: