我要做的是我有一个叫做消息的表。它有5个字段ID,SENDER,RECIPIENT,MESSAGE和TIMESTAMP。每个用户在使用此应用时都会获得一个ID。他使用此应用程序发送的每条消息都会以收件人的ID存储在此表中。
现在我想要的是能够列出每个对话的最新消息,然后按照其最后消息的新近度列出每个对话。让我们称这个表为CONVERSATIONS。
两个用户XX和YY之间的每个对话被定义为由
生成的表SELECT * FROM MESSAGES WHERE SENDER=XX and RECIPIENT=YY ORDER BY TIMESTAMP
在CONVERSATIONS表中,我们只需要MESSAGES表中每个会话的最新消息。
我不想使用PHP,只是在寻找只使用MySQL的解决方案。谢谢。
答案 0 :(得分:0)
如果我理解正确,你可以尝试这样的事情。
select MESSAGES.*,
concat(SENDER|RECIPIENT, "r", SENDER&RECIPIENT) as combo
from MESSAGES inner join (
select max(TIMESTAMP) maxtime,
concat(SENDER|RECIPIENT, "r", SENDER&RECIPIENT) as combo2
from MESSAGES group by combo2
) subq
on combo = combo2 and MESSAGES.TIMESTAMP = subq.maxtime
order by MESSAGES.TIMESTAMP desc
这里使用了分组的标准技术(from here),但我也使用了组合表达式,它是从(SENDER,RECIPIENT)到字符串的交换注入。
它会返回所有行,其中最大时间戳按无序对分组{SENDER,RECIPIENT}