[英]MySQL only one message (the latest) per user in my inbox
请帮助我,我想在收件箱中仅为每个用户显示一条消息(最新消息)。 因此,如果我要与user1 , user2 , user3交换消息,而不是像这样在收件箱中显示所有消息:
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
你可以通过不同的功能来获得它
select MAX(message_id)
编辑。
尝试这个
SELECT p.*, p.sender as sender, m.*
FROM messages p
inner join (select max(message_ID) lates from messages)as max on
max.lates = p.message_ID
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.