0

我想要做的是我有一个名为messages 的表。它有 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 的解决方案。谢谢你。

4

1 回答 1

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

这里使用了标准的分组技术(从这里开始),但我也使用了组合表达式,它是从 (SENDER,RECIPIENT) 到字符串的交换注入。

它将返回所有具有最大时间戳的行,这些行按无序对 {SENDER,RECIPIENT} 分组

于 2013-10-19T14:29:53.333 回答