在MySQL中,如何使用两个值来定义顺序,但优先考虑其中一个值?

在MySQL中,如何使用两个值来定义顺序,但优先考虑其中一个值?,mysql,Mysql,我有一个具有以下表格结构的讨论板: +-------------------------------+ | TABLE: MESSAGES | +-------------------------------+ | id | int(11) | +-------------------------------+ | parent | int(11) | +---------------------------

我有一个具有以下表格结构的讨论板:

+-------------------------------+
|       TABLE: MESSAGES         |
+-------------------------------+
| id             | int(11)      |
+-------------------------------+
| parent         | int(11)      |
+-------------------------------+
| author         | int(11)      |
+-------------------------------+
| last_reply     | datetime     |
+-------------------------------+
| written        | datetime     |
+-------------------------------+
| title          | varchar(256) |
+-------------------------------+
| content        | text         |
+-------------------------------+
last\u reply
的默认值为空。如果某个线程被回复,则该线程中所有消息的
last\u reply
将设置为最后一次回复的日期时间

我试图实现的是一个对话顺序,其中将同时考虑
最后一次回复
书面回复
,但如果可用,
最后一次回复
将优先于
书面回复

因此,如果
last\u reply
可用,我们将使用该值进行订购。如果没有,我们使用书面的

如果解释得不好,我道歉

到目前为止,我的最佳拍摄是:

SELECT *, COALESCE(last_reply,written) AS tmp FROM messages
WHERE parent = 0 ORDER BY written DESC, tmp DESC
这不能正常工作

如果你明白我的意思,请把我引向正确的方向:)

谢谢。

试试这个:

SELECT * FROM messages
WHERE PARENT=0
ORDER BY IFNULL(last_reply,written) DESC
SELECT *, COALESCE(last_reply,0) AS with_replay FROM messages
WHERE parent = 0
ORDER BY with_replay DESC,written DESC 
试试这个:

SELECT *, COALESCE(last_reply,0) AS with_replay FROM messages
WHERE parent = 0
ORDER BY with_replay DESC,written DESC