0

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

+-------------------------------+
|       TABLE: MESSAGES         |
+-------------------------------+
| id             | int(11)      |
+-------------------------------+
| parent         | int(11)      |
+-------------------------------+
| author         | int(11)      |
+-------------------------------+
| last_reply     | datetime     |
+-------------------------------+
| written        | datetime     |
+-------------------------------+
| title          | varchar(256) |
+-------------------------------+
| content        | text         |
+-------------------------------+

的默认值为last_replyNULL。如果回复了一个线程,则last_reply其中所有消息的时间将设置为最后一次回复的日期时间。

我想要实现的是对话的顺序,两者都last_replywritten被考虑,但在可用时last_reply将优先考虑written

因此,如果last_reply可用,我们将使用该值进行排序。如果没有,我们使用书面。

如果解释不当,我深表歉意。

到目前为止,我最好的镜头是这样的:

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

这不能正常工作。

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

谢谢。

4

2 回答 2

3
SELECT * FROM messages
WHERE PARENT=0
ORDER BY IFNULL(last_reply,written) DESC
于 2012-05-13T14:16:51.913 回答
0

试试这个:

SELECT *, COALESCE(last_reply,0) AS with_replay FROM messages
WHERE parent = 0
ORDER BY with_replay DESC,written DESC 
于 2012-05-13T14:27:49.767 回答