2016-11-06 10 views
-1

私はmysqlのテーブルチャットを持っています。これはユーザー間の会話の記録です。MySQLグループの選択

フィールドはです。私は必要なもの

ID、id_from、id_to、メッセージ

Example (My Data in DB): 

1, 50, 10, 'Hello' 
2, 10, 50 'Nice?' 
3, 50, 10, 'Yeah, And you?' 
4, 10, 50, 'Me too' 
5, 1, 20, 'Hello' 
6, 20, 1, 'Nice?' 
7, 1, 20, 'Yeah, And you?' 
8, 20, 1, 'Me too' 
8, 50, 1, 'Hey .....' 
9, 1, 50, "Enhancements ??? ' 
10, 50, 1 ':)' 
11, 1, 50, 'LOL' 

[User] 
id 
name 

id = Paul 50 
id = 1 Samuel 
id = Donald 20 
id = 10 Max 

は、人々の間で行われた最後の会話を返す、SELECTを経由しています。

たとえば、私の選択では、IDが50(Paul)だった最後の2つの会話(各会話の最後のメッセージのみを表示します)を知りたいとします。

どのようにPoderiがMySQL経由でこれを行うのですか?

結果は次のようになります:

4, 10, 50, 'Me too' 
11, 1, 50, 'LOL' 

答えて

0

は、あなたが使用してメッセージのid Sを取得することができます:

select least(id_from, id_to), greatest(id_from, id_to), max(id) 
from messages m 
where 50 in (id_from, id_to) 
group by least(id_from, id_to), greatest(id_from, id_to) 

がメッセージを取得するには、あなたがinjoinを使用することができます。 1つの方法があります:

select m.* 
from messages m 
where m.id in (select max(m2.id) 
       from messages m2 
       where 50 in (m2.id_from, m2.id_to) 
       group by least(m2.id_from, m2.id_to), greatest(m2.id_from, m2.id_to) 
      ); 
+0

ショー、ありがとうございます! :)) - 最小限で最大の機能は何ですか? –

+0

SQLiteでも同じSQLを使用する必要があります。しかし、SQLiteにはそれ以上のものはありません。 –

+0

@MilaSouza。 。 。 SQLiteに関する回答が必要な場合は、別の質問をする必要があります。データベースは異なり、タグも重要です。 –