MySql查询直接消息

时间:2016-07-22 15:19:32

标签: php mysql sql message

您好我正在尝试在PHP中创建直接邮件收件箱。我尝试进行查询,以获取登录用户与登录用户已发送消息或已将消息发送给登录用户的所有人之间的最新消息。类似于Insatagram和Twitter在其收件箱中显示登录用户与已发送消息或已发送消息的人之间的所有对话列表。

截至目前,我的查询显示了当我只想要登录用户和任何其他用户之间的最新消息时,登录用户与已与之交谈的人之间的所有对话。我希望我已经解释得这么好了。

我现在的查询声明是:

SELECT *
FROM dm
WHERE(receiver="user") or (sender="user")
ORDER BY senttime DESC;

我的直接留言表如下:

CREATE TABLE IF NOT EXISTS dm (  
    id INT(11) NOT NULL AUTO_INCREMENT,  
    receiver VARCHAR(100) NOT NULL,  
    sender VARCHAR(100) NOT NULL,  
    senttime DATETIME NOT NULL,  
    message TEXT NOT NULL,  
    PRIMARY KEY (id)
)

例如:

id  receiver sender      senttime            message
1     Jack   Will     2016-07-20 20:59:27      Hi
2     Jack   Bob      2016-07-21 20:59:27      What's up
3     Bob    Jack     2016-07-22 20:59:27      Hanging out what about 
如果Jack是查询中的用户,

应返回以下内容

id  receiver sender      senttime            message
3     Bob    Jack     2016-07-22 20:59:27      Hanging out what about you?
1     Jack   Will     2016-07-20 20:59:27      Hi

1 个答案:

答案 0 :(得分:3)

尝试这样的事情(参见sqlfiddle):

id  receiver    sender  senttime                message 
3   Bob         Jack    July, 22 2016 20:59:27  Hanging out what about
1   Jack        Will    July, 20 2016 20:59:27  Hi

输出将是:

CREATE TABLE IF NOT EXISTS dm (  
    id INT(11) NOT NULL AUTO_INCREMENT,  
    receiver VARCHAR(100) NOT NULL,  
    sender VARCHAR(100) NOT NULL,  
    senttime DATETIME NOT NULL,  
    message TEXT NOT NULL,  
    PRIMARY KEY (id)
);

INSERT INTO dm (receiver, sender, senttime, message) VALUES
('Jack', 'Will', '2016-07-20 20:59:27', 'Hi'),
('Jack', 'Bob', '2016-07-21 20:59:27', 'What\'s up'),
('Bob', 'Jack', '2016-07-22 20:59:27', 'Hanging out what about'); 

运行此代码以创建测试数据:

SELECT val FROM table WHERE pk = ? AND (c1, c2, c3) <= (?, ?, ?)