2012-06-08 70 views
2

這裏我正在擴展我的上一個問題。私人聊天系統MYSQL查詢顯示發件人/收件人的最後一條消息

Private chat system MYSQL query ORDERBY and GROUPBY

另外,我創建了一個多個表稱爲從那裏我會得到用戶信息的用戶。

信息表

message_id|sender_id||receiver_id|message_text| created_time 
    1   101   102  Message A 2012-06-07 08:07:18 
    2   101   102  Message B 2012-06-07 08:10:20 
    3   103   102  Message C 2012-06-07 08:12:43 

用戶表:

id | name 
101 bob 
102 jack 
103 mark 

現在終於我能得到以下結果:

 name|message_text | created_time 
     mark message C 2012-06-07 08:12:43 
     bob message B 2012-06-07 08:10:20 

通過使用此查詢:

SELECT * FROM messages,users 
WHERE messages.receiver_id = 102 
AND messages.sender_id=users.id 
AND messages.created_time IN 
(SELECT MAX(created_time) 
FROM messages 
GROUP BY sender_id) 
ORDER BY messages.created_time DESC 

現在我想在我的結果是

如果插孔(ID:102)回覆標記(ID:103),那麼我怎麼能得到這個輸出:

 name|message_text | created_time 
     mark message D 2012-06-07 08:12:48 
     bob message B 2012-06-07 08:10:20 

注:此處「消息D「並且時間戳是他爲了標記而返回的。

其中MESSAGE_TEXT字段將顯示標誌和插孔 CREATED_TIME場之間的最後的消息會顯示消息創建時間和 名稱字段將顯示的人的名字向誰插孔發送或接收消息。

我想我們需要修改/拆分表,但不知道如何以及什麼查詢將執行此任務。

+0

我在您的表格中看不到'message D' –

+0

@Jadzia這是一個羣組消息系統嗎? – Darshana

+1

如果'jack'回覆'mark'發信人的'message D'應該是'jack'我猜? – Darshana

回答

0

你要求的基本上是按線程而不是發件人。線程可以在兩個人之間發起,不管是發送者還是接收者。

要做到這一點,我將建議改變類似於你的數據結構是什麼一直在這裏討論:Is there a simpler way to achieve this style of user messaging?

+0

Yess!我正在尋找這樣的東西。讓我試試吧.. :) – Jadzia

+0

所有權利傑克,所以我創建了所有表格,如你所說。現在什麼查詢會給我我想要的結果? – Jadzia

+0

@Jadzia該線程充滿了查詢,應該給你一個如何解決它的想法。 –

0

如果這是一個羣聊不限制到receiver_id像messages.receiver_id = 102

SELECT users.name, 
     temp.MESSAGE_TEXT, 
     temp.created_time 
FROM 
    (SELECT sender_id, MESSAGE_TEXT, created_time 
    FROM messages 
    WHERE created_time IN 
     (SELECT MAX(created_time) 
     FROM messages 
     GROUP BY sender_id)) AS temp 
LEFT JOIN users ON temp.sender_id = users.id; 

秀每個發件人發送的最後一條消息

+0

D R再次感謝您的回覆。但是這僅限於receiver_id。如果你可以看看傑克在說什麼。這我想但仍然是問題在那裏。 – Jadzia

+0

其實我查看的查詢將是所有消息的摘要頁面。如果你想我可以爲你做一個演示圖形... – Jadzia

+0

是的,你最好更新你的問題。有人會回答。抱歉!我現在有點忙.. – Darshana