我有一个具有以下表格结构的讨论板:
+-------------------------------+
| TABLE: MESSAGES |
+-------------------------------+
| id | int(11) |
+-------------------------------+
| parent | int(11) |
+-------------------------------+
| author | int(11) |
+-------------------------------+
| last_reply | datetime |
+-------------------------------+
| written | datetime |
+-------------------------------+
| title | varchar(256) |
+-------------------------------+
| content | text |
+-------------------------------+
的默认值为last_reply
NULL。如果回复了一个线程,则last_reply
其中所有消息的时间将设置为最后一次回复的日期时间。
我想要实现的是对话的顺序,两者都last_reply
将written
被考虑,但在可用时last_reply
将优先考虑written
。
因此,如果last_reply
可用,我们将使用该值进行排序。如果没有,我们使用书面。
如果解释不当,我深表歉意。
到目前为止,我最好的镜头是这样的:
SELECT *, COALESCE(last_reply,written) AS tmp FROM messages
WHERE parent = 0 ORDER BY written DESC, tmp DESC
这不能正常工作。
如果你明白我的意思,请指导我正确的方向:)
谢谢。