0

请帮助我,我只想在收件箱中为每个用户显示一条消息(最新消息)。因此,如果我与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
4

2 回答 2

3
    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
于 2013-01-06T02:33:13.520 回答
0

你可以通过不同的功能得到它,比如

 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
于 2013-01-05T21:09:54.430 回答