【问题标题】:SQL - need a query to get most recent message in each thread that a user is part ofSQL - 需要一个查询来获取用户所属的每个线程中的最新消息
【发布时间】: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 中发布您的答案,将会有很大帮助,但我们将不胜感激。谢谢!

【问题讨论】:

    标签: sql tsql messaging


    【解决方案1】:

    如果你有正确的顺序,你应该通过添加来获得“热门”:

    LIMIT 1
    

    【讨论】:

    • 我在想,当我在 MAX () 给我最新帖子的地方分页结果时,将对最终线程集进行限制结果集。但是这个答案并没有触及问题的核心,即:如何将来自线程的最新消息仅加入线程列表?
    【解决方案2】:

    事实证明,这并不像我最初想象的那么困难。因为最近的发布日期存储在线程中,所以我不必在 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2013-09-24
      • 2016-11-02
      相关资源
      最近更新 更多