MySQL 在我的收件箱中每个用户只有一封邮件(最新的)

标签 mysql message

请帮帮我,我只想在收件箱中为每个用户显示一条消息(最新消息)。 因此,如果我正在与 user1user2user3 交换消息, 而不是像这样在收件箱中显示他们的所有消息:

user2 - message 6
user3 - message 5
user2 - message 4
user1 - message 3
user1 - message 2
user1 - message 1

我只需要像这样在我的收件箱中显示来自他们每个人的最新消息。

user2 - message 6
user3 - message 5
user1 - message 3

这是我的表格。

+-----------------------------------------------------------------------------------+
|                                      messages                                     |
+-----------------------------------------------------------------------------------+
| message_ID | sender |receiver| date | subject | body | unread | delete1 | delete2 |
+-----------------------------------------------------------------------------------+

+---------------------+
|        members      |
+---------------------+
| id | username | ... 
+----+----------+-----+

到目前为止这是我的查询。

SELECT p.*, p.sender as sender, m.*
FROM  messages p
LEFT JOIN members m ON p.sender=m.member_id
WHERE p.receiver='<CURRENT_USER>' AND delete2=0
GROUP BY p.sender ORDER BY p.date DESC
LIMIT 5

最佳答案

    SELECT p.*, p.sender as sender, m.*
      FROM `messages` p
INNER JOIN (SELECT sender, 
                   MAX(message_ID) as last_message_id
              FROM `messages` 
             WHERE receiver='<CURRENT_USER>' AND delete2=0
          GROUP BY `sender`) t2 ON t2.sender = p.sender 
                               AND t2.last_message_id = p.message_ID
 LEFT JOIN members m ON p.sender = m.member_id
     WHERE receiver='<CURRENT_USER>' AND delete2=0
  ORDER BY p.date DESC
     LIMIT 5

关于MySQL 在我的收件箱中每个用户只有一封邮件(最新的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176337/

相关文章:

PHP、Mysql聊天应用程序。我不知道

c# - 基于组件的系统中的有效通信

c# - 在 C# 中将消息分成更小的 block

php - Zend + 表关系上的 Doctrine 错误

mysql - 字符值的 Oracle Between 运算符

mysql - 从 3 个不同的表中确定每个用户的总成本

java - 如何在双 SIM 卡中的 android 中发送短信?

java - 在 Spring Batch 3.0.x 中 - 如何为非标准数据库设置数据库类型?

mysql - 创建一个 WHERE OR IN postgres

spring - 有没有办法从 CXF 中的 JAX-RS REST 资源访问 CXF 消息交换?