【问题标题】:MySQL GROUP BY and ORDER BY questionMySQL GROUP BY 和 ORDER BY 问题
【发布时间】:2011-01-17 05:42:20
【问题描述】:

我有一个需要正确订购的消息传递系统。创建帖子时,会自动为其分配一个线程 ID(对于它所属的任何线程)。

我目前正在按照他们的线程 ID 对帖子进行分组,如下所示:

   SELECT 
      *
   FROM 
      `Posts`
   INNER JOIN
      `Profiles`
   ON
      `Profiles`.`ID` = `Posts`.`Sender`
   GROUP BY     
      `Posts`.`ThreadID`
   ORDER BY 
      `Posts`.`ID` DESC

我希望最近更新的线程首先显示在列表中。因此,假设刚刚发布了线程 C 的帖子,线程 C 将首先显示(在线程 A 或线程 B 之前)。我不知道该给ORDER BY 写什么。

有人知道这是否可行吗?

【问题讨论】:

  • Posts 的表定义是什么?
  • Post 表中有哪些字段?如果有的话,您可以按发布日期订购。
  • 目前,您只为每个线程选择 1 个帖子。您知道吗?
  • 我以为是这样 - 有没有办法从线程中选择每个帖子,然后根据最新帖子对线程进行排序?
  • @jamie,是的,但为什么GROUP BY

标签: php mysql


【解决方案1】:
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

【讨论】:

  • 这行不通,分组不允许不同的用户(个人资料)在每个线程中返回一个基本上随机的帖子
  • @developerchris 在这个问题上查看我的 cmets。
  • 更新后的代码导致“Mysql error: Unknown column 'po.ThreadID' in 'on Clause'”。我希望线程显示,我希望它们按他们最近的帖子排序。所以,假设我在线程 C 中提交了一个新帖子,然后线程 C 将排在顶部。
  • @jamie 我刚刚在机器上运行了更新的代码,工作正常。除非您的posts 表中没有名为ThreadID 的列?如果是这样,请在您的问题中发布表格定义!
  • @jamie 已更新。将来,您需要在问题中发布表定义,我们不介意读者。 特别是,当您在问题中发布的代码显示该列名为ThreadID
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多