如何不在两个不同的列中复制值

时间:2018-03-16 03:58:22

标签: php mysql

我正在进行聊天,我想选择用户已发送或接收的用户消息列表,例如fb或twitter。我已尝试过此查询

SELECT DISTINCT * FROM message WHERE `userFrom` = 2 OR `userTo` = 2

但它返回了这张照片中的内容

下面是解释我的问题的图片

PROBLEM

所以我想在这些用户之间返回最后一个动作,如下面的

example

2 个答案:

答案 0 :(得分:0)

这将从同一关系中选择fromuser和touser。

选择distinct least(a.fromuser,b.fromuser), 最大(a.touser,b.touser) 从tbl a join tbl b 在a.fromuser = b.touser上 和a.touser = b.fromuser;

见下面的演示:

http://sqlfiddle.com/#!9/cedc63/1

答案 1 :(得分:0)

您可以在该表上的每次插入后创建一个触发器,而不是在反方向上创建相同的关系。

DELIMITER $$

CREATE TRIGGER after_users_ass_insert
    AFTER INSERT ON yourTable
    FOR EACH ROW 
BEGIN

    IF NOT EXISTS (SELECT NULL FROM yourTable A 
          WHERE A.userFrom=new.UserTo 
          AND A.userTo=new.UserFrom) THEN

          DELETE FROM yourTable 
          WHERE userFrom=new.UserFrom
          AND userTo=new.UserTo; 

    END IF;

END$$
DELIMITER ;