php - mysql 获取对话中的最后一条消息

标签 php mysql sql

我当前正在创建一个私有(private)消息收件箱,并希望显示每个唯一用户之间发送或接收的最后一条消息。我目前有这个

SELECT
 Message.id, Message.from, Message.body, Message.isread, Message.timestamp,
 User.id, User.username,
FROM messages as Message 
 LEFT JOIN users as User ON (Message.from = User.id)
    WHERE Message.id IN
     (SELECT MAX(`id`) FROM `messages` 
        WHERE `to` = '.$this->currentUser["id"].'
         OR `from` = '.$this->currentUser["id"].'
    GROUP BY `from`,`to`)
 ORDER BY Message.id DESC;

但它同时获取最后发送和接收的消息,我只想要当前用户与任何其他用户以及与之对话的用户之间发送的最后一条消息。

 `Message`.`id` is auto incremented, indvidual message id.
 `Message`.`from` is the ID of the user the message is from.
 `Message`.`to` is the ID of the user the message us to.

谢谢

最佳答案

理解我的回答可能来得太晚了,但仍然如此。这为我解决了这个问题:

SELECT id, user_to, user_from, body, msg_time FROM chat
WHERE id IN (SELECT MAX(id) FROM chat WHERE user_to=:id OR user_from=:id GROUP BY user_to,user_from) ORDER BY msg_time DESC

:id 稍后会更改为 $id var,如下所示(如果您使用 PDO)-

        $stmt=$this->conn->prepare("SELECT id, user_to, user_from, body, msg_time FROM chat
            WHERE id IN (SELECT MAX(id) FROM chat WHERE user_to=:id OR user_from=:id GROUP BY user_to,user_from) ORDER BY msg_time DESC");
        $stmt->execute(array(":id"=>$id));
        $stmt=$stmt->fetchAll(PDO::FETCH_ASSOC);
        return $stmt;

希望这对那些仍在寻找的人有所帮助 - 我花了很长时间;)干杯。

关于php - mysql 获取对话中的最后一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194918/

相关文章:

php - 向多个设备发送推送时注册无效

Mysql-> rand() 之后分组

mysql - MySQL 5.7中如何产生gap lock死锁

php - 如何立即引用 html select 标签

SQL - Access 条件更新

php - php-mysql 中的多个复选框验证

php - 如何检查输入数据中是否出现字符串

php - 改变照片的 iPhone 应用程序如何工作?

php - 在 MySQL 表中搜索逗号分隔的区号

mysql - 组合两个不同的数据集时子查询不返回数据