从另一个表的数据生成表

时间:2013-10-19 11:20:37

标签: mysql

我要做的是我有一个叫做消息的表。它有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的解决方案。谢谢。

1 个答案:

答案 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}