我想要做的是我有一个名为消息的表。它有 5 个字段 ID、SENDER、RECIPIENT、MESSAGE 和 TIMESTAMP。每个用户在使用此应用程序时都会获得一个 ID。他使用此应用程序发送的每条消息都会与收件人的 ID 一起存储在该表中。
现在我想要的是能够列出每个对话的最新消息,然后按照最后一条消息的新近度顺序列出每个对话。我们将此表称为“对话”。
两个用户 XX 和 YY 之间的每次对话都定义为由
生成的表SELECT * FROM MESSAGES WHERE SENDER=XX and RECIPIENT=YY ORDER BY TIMESTAMP
在 CONVERSATIONS 表中,我们只需要 MESSAGES 表中每个对话的最新消息。
我不想使用 PHP,并且正在寻找仅使用 MySQL 的解决方案。谢谢。
最佳答案
如果我理解正确,你可以尝试这样的事情。
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) 到字符串的交换注入(inject)。
它将返回按无序对 {SENDER,RECIPIENT} 分组的具有最大时间戳的所有行
关于mysql - 从另一个表的数据生成一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19465497/