Postgresql facebook消息结果集,如

Postgresql facebook消息结果集,如,postgresql,facebook,messages,group-by,Postgresql,Facebook,Messages,Group By,我试着用group by命令来控制我的头脑,基本上我试着选择一个用户的所有消息,按主题分组,然后显示它们——就像FaceBook是如何做到的一样 结果应该包含最新的邮件id、发件人id、日期以及该主题中的邮件总数 消息表可以如下所示: message ------- id sender_id subject created_at 因此,结果应该显示按同一主题分组的所有用户消息 SELECT sender_ID, subject, MAX(id), MAX(created_at), COUNT (

我试着用group by命令来控制我的头脑,基本上我试着选择一个用户的所有消息,按主题分组,然后显示它们——就像FaceBook是如何做到的一样

结果应该包含最新的邮件id、发件人id、日期以及该主题中的邮件总数

消息表可以如下所示:

message ------- id sender_id subject created_at 因此,结果应该显示按同一主题分组的所有用户消息

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等


编辑-意识到上面提到的小组并没有达到我认为你想要的效果,尽管示例结果集会有所帮助,所以有人想简化一下。在创建邮件时,您是否可以设置一个额外的列值-CONVERSION_id。在创建新邮件时,该值将被分配给一个新值,然后重新用于任何回复。然后,您可以按对话id分组,以我认为您希望的方式将邮件分组

您可能希望按发件人id排序主题伙计们,按发件人id排序不会列出从最新到最旧的邮件。。。?它需要按created_at排序,以便按日期顺序显示消息。no?好的,这比我想象的要困难一些。在我的问题中,我没有提到只获取特定用户的所有消息,因此没有where子句。如果我们在sql中包含where子句,如下所示:其中recipient\u id=current\u user\u id或sender\u id=current\u user\u id,那么结果还将获取发送消息给当前用户的相同主题但不同的用户。有什么想法吗?通过tooThanks将当前用户id添加到组中,非常有帮助。但当前用户id是一个变量。所以where看起来是这样的:where-receiver\u-id={current\u-user\u-id}或sender\u-id={current\u-user\u-id}。无法将其放入group by子句中。对于消息表中少数用户和消息的示例数据集,请提供要返回的结果集示例?目前,我还不清楚在理想的输出中应该如何将它们组合在一起