从不同聊天中的一个用户获取所有对话

时间:2017-12-27 22:26:36

标签: mysql sql

我的问题是继续this发布。

在那里,你可能已经注意到标记为已回答的查询并没有真正输出消息正文本身。

对于我的情况,我需要的是输出一个WhatsApp风格的聊天'图。

此查询几乎解决了这个问题:

SELECT T1.user2_id, users.userName, users.ava, max(cdate) maxDate FROM
            (SELECT user_to user2_id, max(msg_time) cdate
                FROM chat WHERE user_from=:id
                GROUP BY user_to
            union distinct
            (SELECT user_from user2_id, max(msg_time) cdate
                FROM chat WHERE user_to = :id
                GROUP BY user_from)) T1
            inner join users on (users.userID = T1.user2_id)
            group by T1.user2_id
            order by maxDate desc

但剩下的事情是:如果我只是添加msg(' msg'保存实际消息并且是表中的一列' chat')到每个SELECT,查询选择错误的消息。虽然我理解为什么会发生这种情况,但我无法让它真正发挥作用。谢谢你的任何建议!

1 个答案:

答案 0 :(得分:0)

将其包装在另一个SELECT + JOIN中。

究竟是什么查询:获取给定用户的所有聊天记录,获取每次聊天的最新消息(无论是登录用户发送的消息,还是来自其他用户的登录用户收到的消息(结果不需要加倍) ()),按降序日期对所有聊天进行排序,即最近一次。

$sql="
SELECT T2.maxDate, T2.user2_id, T2.ava, T2.userName,chat.user_to, chat.user_from,chat.body,chat.viewed FROM 
(SELECT T1.user2_id, users.userName, users.ava, max(cdate) maxDate FROM
                (SELECT chat.user_to user2_id, max(msg_time) cdate
                    FROM chat WHERE chat.user_from=18
                    GROUP BY chat.user_to
                union distinct
                (SELECT chat.user_from user2_id, max(msg_time) cdate
                    FROM chat WHERE chat.user_to=18
                    GROUP BY chat.user_from)) T1
                inner join users on (users.userID = T1.user2_id)
                group by T1.user2_id
                order by maxDate desc) T2
                join chat on (T2.maxDate = chat.msg_time) ORDER BY T2.maxDate DESC";