2016-12-03 59 views
0

我已經在這個問題上掙扎了好幾個小時了。我正在編寫郵件系統,我的表格有以下列:MySQL組通過concat值得到每個組中的第一個id(UUID)

ID(UUID)| from_user_id(uuid)| to_user_id(uuid)|主題| body | created_at

在收件箱頁面我需要獲得按主題+ from_user_id分組的結果。這是必需的,因爲如果主題相同,那麼它是一個單獨的對話,from_user_id應與主題連接,以確保如果其他用戶將發送具有相同主題的消息,則不會與其他對話合併。

第二件事是,我需要獲得第一個消息作爲對話封面消息顯示每個組。如果我使用了正常的ID,那麼解決問題會非常容易,但是我使用的是UUID,因此我無法使用最小或最大值。所以我需要使用created_at字段來確定哪一行是最後一行。

我已經嘗試了很多不同的方法,但我無法得到我需要的結果。也許有人有類似的問題,並有解決方案?

select msg.id, msg.body, msg.created_at, concat(msg.from_user_id, msg.subject) as concat 

from messages as msg 

where msg.to_user_id = '8d99eb39-24f8-4dd6-b984-9505cd3eb6b6' 


order by msg.created_at desc limit 10 offset 0 
+0

你用'GROUP BY concat'在查詢結束?究竟是什麼問題? – farhadamjady

+0

group by concat將不會執行這項工作,因爲我還需要檢索每個組中的第一個項目(至少是第一個id),但按值的順序分組時,它們是隨機的,我不能使用max(id)因爲它是UUID –

回答

1

基本上你需要的子查詢中的每個線程,以確定最後的消息, 然後選擇針對子查詢從每個那最後形式交往中得到的細節

select * from messages 
where to_user_id = 'jim' 
    and concat(from_user_id, subject, created_at) in (

    select max(concat(from_user_id, subject, created_at)) 
    from messages 
    where to_user_id = 'jim' 
    group by concat(from_user_id, subject)) 
+0

哇!你救了我的一天艾倫!謝謝! :)我不知道我可以做這樣的事情max(concat(from_user_id,subject,created_at))。 –

相關問題