我有一个需要正确订购的消息系统。创建帖子时,会自动为其分配一个线程ID(对于它所属的任何线程)。
我目前正在根据他们的主题ID对这些帖子进行分组:
SELECT
*
FROM
`Posts`
INNER JOIN
`Profiles`
ON
`Profiles`.`ID` = `Posts`.`Sender`
GROUP BY
`Posts`.`ThreadID`
ORDER BY
`Posts`.`ID` DESC
我想要发生的是最近更新的THREAD首先显示在列表中。因此,如果刚刚发布了线程C的帖子,则首先显示线程C(在线程A或线程B之前)。我不知道要为ORDER BY
添加什么。
有人知道这是否可行?
答案 0 :(得分:2)
SELECT *
FROM `Posts` INNER JOIN `Profiles` ON
`Profiles`.`ID` = `Posts`.`Sender`
GROUP BY
`Posts`.`Thread`
ORDER BY
MAX(`Posts`.`ID`) DESC
<强>更新强>: 如果你想获得每个帖子的所有帖子并在最上面显示最新的帖子:
SELECT p.*, pf.*
FROM Posts p JOIN `Profiles` pf ON pf.ID = p.Sender
JOIN (
SELECT Thread, MAX(ID) MaxPost
FROM Posts
GROUP BY Thread) po ON p.Thread = po.Thread
ORDER BY po.MaxPost DESC, p.ID DESC