根据MySql中的给定用户,从两列中选择唯一行

时间:2015-03-18 23:32:14

标签: mysql select

我正在创建一个聊天系统,我的数据库看起来像

from  to  msg  date
----  -- ----  -----------------
a     b   hi    12-3-15 12:04:21
b     a   hi    12-3-15 12:12:21
c     b   hi    12-3-15 12:14:21
d     b   hi    12-3-15 12:14:21
a     b   msg1  12-3-15 12:12:21
a     b   msg2  12-3-15 12:50:23
a     b   msg3  12-3-15 13:44:21
b     a   msg1  12-3-15 15:12:21
b     e   hi    12-3-15  15:32:21
b     c   hi    12-3-15 16:12:21

我正在尝试创建一个查询,返回上次使用&b;#39;' b'或者通过使用收到的最后一条消息' b'并输出如

Actor b
----
c
e
a
d

我写了一个查询

(SELECT `to`
      , `from` 
 FROM databaseTable 
 WHERE from = 'b' 
 ORDER BY date desc) 

UNION 

(SELECT `to`
      , `from` 
 FROM databaseTable 
 WHERE to = 'b'
 ORDER BY date desc )

但它没有归还我想要的东西

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

select distinct `to` as ActorB
from
(
    select * from
    (
        SELECT `to`,`date` 
        FROM databaseTable 
        WHERE from = 'b'
        UNION 
        SELECT  `from` , `date`
        FROM databaseTable 
        WHERE to = 'b'
    ) temp
    ORDER BY date desc
) temp

以上查询应该有效。

答案 1 :(得分:0)

这应该返回b发送或接收的最后一条消息。但我可能遗漏了你的问题,因为这与你的预期输出不符。

 (SELECT `to`
          , `from` 
     FROM databaseTable 
     WHERE from = 'b' OR to= 'b'
     ORDER BY date desc) 
  LIMIT 1;