0

助けてください。受信ボックスに各ユーザーのメッセージ (最新) を 1 つだけ表示したいのですが。したがって、次のように受信トレイにすべてのメッセージを表示するのではなく、 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 に答える