2010-04-05 49 views
1

我正在嘗試創建基於對話的消息傳遞系統。用相同的值分組記錄

我想將具有相同conversation_id的所有郵件分組,以便當我顯示當前會話列表時,您只能看到來自每個會話的最新郵件。

我可以將mysql查詢中的值分組嗎,還是我必須在php中完成它?

回答

1

感謝您的幫助,這是我結束了。

SELECT messages.*, messages_conversations.subject 
FROM messages, messages_conversations 
WHERE messages.to_user_id = '".$userid."' 
AND messages_conversations.id = messages.conversation_id 
GROUP BY messages.conversation_id 
0

您可以將在MySQL查詢什麼樣T這樣的:

select * from table where conversation_id = id_here 

這將讓所有具有conversation_id設置爲id_here,然後你可以使用PHP來對陣列/組的工作記錄。

+0

嗨Sarfraz,謝謝,但我需要檢索的所有對話,這將都具有不同的id所以不能指定確切的ID – Ben 2010-04-05 07:36:40

+0

@Ben:那麼我認爲你可能需要使用GROUP BY SQL的關鍵字。 – Sarfraz 2010-04-05 07:57:32

+0

謝謝,是的,我現在正在這個地方得到什麼地方。 SELECT消息。 *,messages_conversations.subject FROM messages,messages_conversations WHERE messages.to_user_id ='「。$ userid。」'GROUP BY messages.conversation_id – Ben 2010-04-05 08:00:21

0

它是數據庫中父子關係的基本示例。 每條消息都有唯一的id,iys也應該引用convo id的父鍵。

然後你可以得到給定convo id的最新消息。

+0

我有一個名爲messages_convos的表,它具有字段id,主題和一個表,其中包含id,convos_id (來自messages_convos的id),from_user_id,to_user_id,message_content,date_sent,message_read – Ben 2010-04-05 07:40:59

+0

準確地說,您已經正確完成了數據庫設計。那麼我無法理解你的問題。只需根據timsestamp或id字段(如果是自動遞增)從message_convo表中選擇一個給定id的消息表中的id即可。 從消息m,message_convo c中選擇*,其中c.id = m.convos_id和m.convo_id =參數[0]按時間戳順序desc limit 1排序。 – 2010-04-05 07:54:55

2
select m.convos_id, m.message_content from messages m 
      where m.id in 
      (select MAX(m1.id) from messages m1 GROUP BY m1.convos_id)