2017-04-07 21 views
2

私が探しているもの:
私は各会話から最後のメッセージを選択できるSELECTクエリを探しています。会話は、両方の側で同じユーザーIDを持つすべての行で構成されます。 例:4-2 & 2-4。mySQLの各会話から最後のメッセージを取得するにはどうすればよいですか?

メッセージテーブル:
ID ----- ----- をReceiver_ID SENDER_ID ----- ----- タイムスタンプ
1 ------------------- 4 --------------------- 2 -------- --... ----------------- ...
2 ------------------- 2 --- ------------------ 4 ----------...-----------------。 ..
3 ------------------- 4 --------------------- 2 ---- ------...-----------------。 ..
4 ------------------- 4 --------------------- 2 ---- ------... ----------------- ...
5 ------------------- 4 --------------------- 3 ----------...-------------- ---
6 ------------------- 3 --------------------- 4 ----------... ----------------- ...

結果:
ID --- - SENDER_ID ----- Receiver_ID ----- ----- タイムスタンプ
4 ------------------- 4 --------------------- 2 ------ ----... ----------------- ...
6 ------------------- 3- -------------------- 4 ----------...---------------- -...

答えて

3

会話から最後のメッセージを取得するには、最後のID(常に増加している場合)または最後のタイムスタンプを取得するためにグループをクエリで使用できます。小さな

select m.* 
from 
    messages m inner join (
    select 
     least(sender_ID, receiver_ID) as user_1, 
     greatest(sender_ID, receiver_ID) as user_2, 
     max(ID) as last_id, 
     max(timestamp) as last_timestamp 
    from 
     messages 
    group by 
     least(sender_ID, receiver_ID), 
     greatest(sender_ID, receiver_ID) 
) s on least(sender_id, receiver_id)=user_1 
     and greatest(sender_id, receiver_id)=user_2 
     and m.id = s.last_id -- or last timestamp 
+0

ワン:

select least(sender_ID, receiver_ID) as user_1, greatest(sender_ID, receiver_ID) as user_2, max(ID) as last_id, max(timestamp) as last_timestamp from messages group by least(sender_ID, receiver_ID), greatest(sender_ID, receiver_ID) 

あなたは、このようなクエリで実際のメッセージを取得することができます:_1は低くIDを持つユーザーであること、そして会話の高いIDを持つユーザーをUSER_2ます質問、IDを選択するのと同じ結果を得るためにこれを使用できますか?ユーザー3の最後のメッセージを取得したいとしましょう。ユーザー2の場合と同じ結果が1つだけあります。ただし、ユーザー4は2つの結果が必要です。 –

+0

はい、この条件を最初のクエリまたは2番目のクエリに追加することができます。最初は 'sender_id = 3またはreceiver_id = 3 group by ...'以下のメッセージからです。メッセージから3(sender_id、receiver_id)のグループが... ' – fthiella

+0

もう一度ありがとう!あなたは私をたくさん助けました。 –

関連する問題