0

我正在尝试按命令分组,基本上我正在尝试选择用户的所有消息,按主题对它们进行分组然后显示它们 - 就像 Facebook 是如何做到的一样。

结果应该包含最新的邮件 ID、发件人的 ID、日期和该主题中的邮件总数。

消息表可能如下所示:

信息
--------
ID
发件人ID
主题
created_at

所以结果应该显示按同一主题分组的所有用户消息。

4

1 回答 1

1
SELECT sender_ID, subject, MAX(id), MAX(created_at), COUNT (id) 
FROM message 
WHERE recipient_id = current_user_id OR sender_id = current_user_id
GROUP BY subject, sender_ID, receipient_id
ORDER BY MAX(created_at) DESC

使用 GROUP BY,任何不在 GROUP BY 子句中的东西都需要在 SELECT 语句中的聚合函数(例如 COUNT、SUM、MAX 等)中。

编辑 - 意识到上面的 Group By 并没有完全按照我的想法做(虽然示例结果集会有所帮助),所以有人想简化这一点。在创建消息时,您可以设置一个额外的列值 - conversation_id。当创建新消息然后将其重新用于任何回复时,这将被分配给一个新值。然后,您可以 Group By conversation_id 以我认为您希望它们的方式将消息分组在一起

于 2010-02-26T13:56:46.763 回答