2016-04-09 1 views
0
SELECT * 
FROM messages 
WHERE message_id IN (SELECT MAX(message_id) 
        FROM messages 
        GROUP BY if(sender_id > receiver_id, CONCAT(sender_id, receiver_id), CONCAT(receiver_id, sender_id)) 
        ) 

私はメッセージが1 t 1(グループなし)の単純なメッセージングシステムを持っています。 2人のユーザーの間で最新のメッセージを取得したいだけです。MySQLは2人の間で最新のメッセージを取得します

上記の「動作しますが、最新のものを得るためにmax timestamp vs message_idを使用する必要があると思います。

私のテーブルがある:それは非常に適切ではない場合でも、あなたはここでhaving句を使用することができるし、排除する必要があるよう

Select message_id from messages where sender = x and receiver = y having max (timestamp) group by message_id 

感じる:

message_id (unique, auto inc), 
sender_id (Primary), 
receiver_id (Primary), 
time_date, 
content 

答えて

2

は、あなたは、単にこれを行うことはできませんサブクエリが必要です。次

1

この作品

SELECT * 
FROM messages as m1 
WHERE m1.time_date IN (SELECT MAX(time_date) 
        FROM messages as m2 
        WHERE (m1.sender_id = m2.sender_id and m1.receiver_id = m2.receiver_id) or 
          (m1.sender_id = m2.receiver_id and m1.receiver_id = m2.sender_id)  
        ) 
+0

。あなたの元のクエリ(インナーgroup byが除去された異なるcorrelated subqueryを用いて、溶液、ですが、それは。私が取得したいと思い、各ユーザが送信された最新のメッセージを返します。 2人のユーザーの間で最新のメッセージが交換されました。 – ovg

+0

ansが更新されました。 –

関連する問題