在我的应用中,“消息线程”被定义为两个或更多用户之间的所有消息,并且不是嵌套的。它需要像Facebook消息一样工作。
我需要一个查询,该查询生成所有“消息线程”的列表,其中用户是其成员,按最近活动的线程排序,降序。结果是一个不同线程的表,其中每一行包含threadID,postDate和messageBody。
这是我的架构:
MessageThreads (threadID,lastPostDate)
MessageThreadUsers (threadFK,userFK)
消息(messageID,threadFK,senderFK,postDate,messageBody)
用户(userID,userName,userEmail,...)
首先,此查询为我提供了来自用户所在线程的所有消息:
SELECT * FROM MessageThreadUsers
JOIN Messages ON MessageThreadUsers.threadFK = Messages.threadFK
WHERE MessageThreadUsers.userFK = 'usr_developer'
ORDER BY messageDate DESC
但是我怎么才会得到最新的?我想我会使用MAX(messageDate)函数,但是这样在JOIN中是如何工作的呢?我如何为每个线程提取包含消息数据的单行?
如果您可以在TSQL中发布您的答案,这将有所帮助,但任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
如果你有正确的订单,你应该通过添加:
获得“最高点”LIMIT 1
答案 1 :(得分: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'