繁体   English   中英

MySql消息传递系统查询每次会话获取一条消息

[英]MySql messaging system query fetch one message per conversation

我有这3张桌子:

messages:
id  conv    snd text    created
1   1   1   asdasd      2012-12-15 23:10:53
3   1   1   zzz         2013-01-18 12:37:44
4   1   1   ssss        2013-01-18 12:42:01


msg_status
id  msg user    status
1   1   1       mine
2   1   4       unread
3   3   1       mine
4   3   4       unread
5   4   1       mine
6   4   4       unread


conv_users
conv    user
1       1
1       4
2       1
2       4
2       5

这是我站点中的一个消息传递系统,除了这个小查询之外,我已经准备就绪,可以使用对话中的最后一条消息来获取所有用户对话。

这意味着,如果用户A有2个会话,并且conv1中有10条消息,而conv2中只有2条消息,则他将获得两行:convId,messageId,messageText,messageDate等。

但是问题在于该消息应该是每次对话中的最后一条。

这是我已经完成的查询,但是没有用!

SELECT
  cu.conv,
  msg.snd,
  msg.text,
  mst.status,
  msg.created
FROM conv_users AS cu
  INNER JOIN messages AS msg
    ON cu.conv = msg.conv
  INNER JOIN msg_status AS mst
    ON msg.id = mst.msg
WHERE cu.user = 4
    AND mst.user = 4
ORDER BY msg.created DESC

如果我添加GROUP BY cu.conv它将显示第一条消息,而不是我想要的最后一条消息。

尝试将已查询的查询与max

SELECT
  cu.conv,
  msg.snd,
  msg.text,
  mst.status,
  msg.created
FROM conv_users AS cu
  INNER JOIN (SELECT MAX(id), conv FROM messages GROUP BY conv )messages AS msg ON cu.conv = msg.conv
  INNER JOIN (SELECT MAX(id) , msg FROM msg_status GROUP BY msg) AS mst ON msg.id = mst.msg 
WHERE cu.user = 4
    AND mst.user = 4
ORDER BY msg.created DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM