我有消息系统,我想从每个对话中获取最后一条消息,所以我可以在消息通知面板中显示它,我有两个表 convo id是独一无二的。用户名
也是如此convo_id|from_user | to_user | updated
========================================
1 | user1 | user6 | 1463311906
2 | user2 | user7 | 1463311906
3 | user8 | user1 | 1463311906
4 | user4 | user9 | 1463311906
5 | user5 | user10 | 1463311906
这是聊天表,它存储所有消息*消息的详细信息
id |convo_id|from_user | to_user | updated | message
=========================================================
1 | 1 | user1 | user6 | 1463311906 | hello
2 | 2 | user1 | user6 | 1463311906 | hi
3 | 3 | user1 | user6 | 1463311906 | howdy
4 | 3 | user8 | user1 | 1463311906 | great
5 | 2 | user8 | user1 | 1463311906 | good
现在我想要的只是得到每个对话的最后一条消息,例如 我的用户名是“user1”,我有消息“user6”所以在聊天表中,你可以看到我已经三次发送消息user6所以我想从这三条消息中获取最后一条消息
正如你在对话表中看到的那样,user8有两次消息user1是我,所以我也希望得到最后一条消息。 我怎么能做到这一点?
这是我尝试过的事情
SELECT
*
FROM
test_convo
WHERE
to_user = 'user1'
OR from_user = 'user1'
这是我从convo表中得到的结果
'1', 'user1', 'user6', '1463311906', '0'
'2', 'user8', 'user1', '1463311906', '0'
当我使用while循环时,如何从聊天表
获取每个会话的最后一条消息答案 0 :(得分:1)
请使用可能这可以帮助您:
SELECT max(YOURID),TABLENAME.*
FROM TABLENAME
GROUP BY yourid
答案 1 :(得分:1)
您找到每个会话ID的最大ID,这是最后一条消息,然后将该派生表与聊天表一起加入以获取消息和任何其他信息:
select c.maxid as chatID,d.from_user,d.to_user,c.convo_id,d.message
from tblchat d
inner join (select max(b.id) as maxID,b.convo_id
from tblconv a
inner join tblchat b
on a.convo_id=b.convo_id
group by b.convo_id) c
on c.maxID=d.id
答案 2 :(得分:1)
你可以使用“IN”功能这里id是自动增量所以默认你会得到最大id。
SELECT *
FROM test_convo tc
where tc.id in ( select last(tc1.id)
from test_convo tc1
where tc1.to_user = 'user1') or tc.id in
( select last(tc2.id)
from test_convo tc2
where tc2.from_user = 'user1');
否则,如果您使用MYSQL,则可以使用限制
SELECT *
FROM test_convo tc
where tc.id in ( select last(tc1.id)
from test_convo tc1
where tc1.to_user = 'user1' order by id desc limit 1) or tc.id in
( select last(tc2.id)
from test_convo tc2
where tc2.from_user = 'user1' order by id desc limit 1);