MySQL GROUP BY和ORDER BY问题

时间:2011-01-17 05:42:20

标签: php mysql

我有一个需要正确订购的消息系统。创建帖子时,会自动为其分配一个线程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添加什么。

有人知道这是否可行?

1 个答案:

答案 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