2012-03-29 43 views
0

在我的應用中,「消息線程」被定義爲兩個或多個用戶之間的所有消息,並且不是嵌套的。它需要像Facebook消息一樣工作。SQL - 需要一個查詢來獲取用戶所屬的每個線程中的最新消息

我需要一個查詢,生成一個用戶所屬的所有「消息線程」的列表,按照最近活動的線程降序排列。結果是一個不同線程的表,其中每行包含threadID,postDate和messageBody。

這裏是我的架構:

MessageThreads(線程ID,lastPostDate)
MessageThreadUsers(threadFK,userFK)
消息(MESSAGEID,threadFK,senderFK,踵,消息體)
用戶(userID,userName,userEmail,...)

要開始w ith,這個查詢給我所有來自用戶所在線程的消息:

SELECT * FROM MessageThreadUsers 
JOIN Messages ON MessageThreadUsers.threadFK = Messages.threadFK 
WHERE MessageThreadUsers.userFK = 'usr_developer' 
ORDER BY messageDate DESC 

但是我怎樣才能得到最新的?我想我會使用MAX(messageDate)函數,但是如何在JOIN中工作?我將如何爲每個線程提供消息數據的單行?

這將有助於很多,如果你可以發佈你的答案TSQL,但任何幫助表示讚賞。謝謝!

回答

0

如果你有正確的順序,則應該通過添加得到「最高命中」:

LIMIT 1 
+1

我在想,限制結果集將完成最後一組線程,因爲我在MAX()會給我最新的帖子的頁面結果。但是,這個答案並沒有涉及到問題的核心問題,即:我如何只將來自線程的最新消息連接到線程列表中? – Redtopia 2012-03-29 13:41:02

0

事實證明,這是我首先想到的是並不困難。由於最新的發佈日期存儲在線程中,因此我不必在Messages表中彙總messageDate。這是我的查詢:

SELECT DISTINCT 
    MessageThreadUsers.threadFK, 
    MessageThreads.threadDate, 
    [Messages].MessageBody, 
    [Messages].senderFK, 
    Users.userFullName 
FROM MessageThreadUsers 
JOIN MessageThreads ON MessageThreadUsers.threadFK = MessageThreads.threadID 
JOIN Messages ON MessageThreads.threadDate = Messages.messageDate 
JOIN Users ON Messages.senderFK = Users.userID 
WHERE userFK = 'usr_developer' 
相關問題