在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