2016-11-06 130 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,返回的人之間發生的最後一次談話。

例如,在我的選擇中,我想知道最後兩個對話(僅顯示每個對話的最後一條消息),該對話有50(Paul)。

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。這裏有一種方法:

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的答案,你應該問另一個問題。數據庫不同,標籤很重要。 –