【发布时间】:2012-03-29 05:58:37
【问题描述】:
在我的应用程序中,“消息线程”被定义为两个或多个用户之间的所有消息,并且没有嵌套。它需要像 Facebook 消息一样工作。
我需要一个查询来生成用户是其中成员的所有“消息线程”的列表,按具有最近活动的线程降序排序。结果是一个不同线程表,其中每一行包含线程 ID、postDate 和 messageBody。
这是我的架构:
MessageThreads(threadID、lastPostDate)
MessageThreadUsers(threadFK、userFK)
Messages(messageID、threadFK、senderFK、 postDate, messageBody)
用户(用户 ID、用户名、用户电子邮件...)
首先,此查询为我提供了来自用户所在的所有线程的所有消息:
SELECT * FROM MessageThreadUsers
JOIN Messages ON MessageThreadUsers.threadFK = Messages.threadFK
WHERE MessageThreadUsers.userFK = 'usr_developer'
ORDER BY messageDate DESC
但是我怎样才能只获得最新的呢?我想我会使用 MAX(messageDate) 函数,但是在这样的 JOIN 中它是如何工作的?以及如何为每个线程提取包含消息数据的单行?
如果您可以在 TSQL 中发布您的答案,将会有很大帮助,但我们将不胜感激。谢谢!
【问题讨论】: