php - 直接消息的 MySql 查询

标签 php mysql sql message

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

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

我现在的查询语句是:

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

最佳答案

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

SELECT * FROM dm
INNER JOIN
(
  SELECT MAX(id) as id FROM ( 
    SELECT MAX(id) as id, receiver as contact
    FROM dm
    WHERE sender="Jack"
    GROUP BY receiver
    UNION ALL
    SELECT MAX(id) as id, sender as contact
    FROM dm
    WHERE receiver="Jack"
    GROUP BY sender
  ) t GROUP BY contact
) d
ON dm.id = d.id
ORDER BY senttime DESC;

输出将是:

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'); 

关于php - 直接消息的 MySql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530065/

相关文章:

php - 我应该如何使用 jQuery 验证插件检查记录是否存在?

php - 在 PHP 中读取 COM(串行调制解调器)

php - 方法不允许 Http 异常 laravel 5.4

php - 我的 PHP 变量没有插入到我的 MySQL 表中

sql - 因帕拉/SQL : group by - aggregate a field by creating a list of all values

MySQL 键有点奇怪

mysql - Docker 数据库容器正在运行。 pid <id> 的另一个进程正在使用 unix 套接字文件

mysql - 所以,我的 Cassandra 顾问离开了我,现在我正在考虑恢复到 mysql

java - 将 iSeries JDBC 连接到 Microsoft Azure SQL Server

php - 将自定义数据库表添加到 WordPress 搜索