得到最后的对话

时间:2016-07-23 19:25:03

标签: mysql left-join

我需要你的帮助!

问题:我在用户之间有一个消息系统,我需要获得所有会话的最后一次会话。这意味着,我必须在user1和user2之间获得最后写入的消息以及可能更早消息的对话。

我的'消息'表结构是这样的:

'id' | 'uidfrom' | 'uidto' | 'content' | 'cdate'

enter image description here

'uidfrom'是撰写邮件的用户,'uidto'是收到邮件的用户。

你们有一个想法,或者甚至可能,赶上最后的谈话?所以在这种情况下,最后写的消息是'id'= 5,现在我需要在'uidfrom'= 1 AND'uidto'= 2 +'uidfrom'= 2 AND'uidto'= 1之间进行整个对话。

编辑:查询应该是动态的。所以它应该返回最新消息加上对话。例如。当id = 3上写有2016-07-19- 17:13:50的邮件时,它应该只返回此邮件,因为此类会话中只有一条。还有什么想法吗?

3 个答案:

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