我需要你的帮助!
问题:我在用户之间有一个消息系统,我需要获得所有会话的最后一次会话。这意味着,我必须在user1和user2之间获得最后写入的消息以及可能更早消息的对话。
我的'消息'表结构是这样的:
'id' | 'uidfrom' | 'uidto' | 'content' | 'cdate'
'uidfrom'是撰写邮件的用户,'uidto'是收到邮件的用户。
你们有一个想法,或者甚至可能,赶上最后的谈话?所以在这种情况下,最后写的消息是'id'= 5,现在我需要在'uidfrom'= 1 AND'uidto'= 2 +'uidfrom'= 2 AND'uidto'= 1之间进行整个对话。
编辑:查询应该是动态的。所以它应该返回最新消息加上对话。例如。当id = 3
上写有2016-07-19- 17:13:50
的邮件时,它应该只返回此邮件,因为此类会话中只有一条。还有什么想法吗?
答案 0 :(得分:0)
Select *
from message
where
uidfrom IN (select uidfrom,uidto from message order by id desc limit 0,1) AND
uidto IN (select uidfrom,uidto from message order by id desc limit 0,1)
答案 1 :(得分:0)
尝试 选择 * 来自消息 哪里 uidfrom IN(选择uidfrom,uidto来自消息,其中id =(从消息中选择max(id)))AND uidto IN(从消息中选择uidfrom,uidto,其中id =(从消息中选择max(id)))
答案 2 :(得分:0)
这应该对你有用,它会给你第1,2,4和5行。
从stack1中选择*,其中uidfrom IN(从stack1中选择uidfrom,其中id =(从stack1中选择max(id))UNION从stack1中选择uidto,其中id =(从stack1中选择max(id)))和uidto IN(选择来自stack1的uidfrom,其中id =(从stack1中选择max(id))UNION从stack1中选择uidto,其中id =(从stack1中选择max(id)))