-1

我正在开发一个具有表格的聊天功能casesentries并且attachments. 每个聊天(案例)都有包含一个或多个附件的聊天条目。附件可以是例如文本消息或视频消息。现在,我正在努力在聊天概述中显示特定聊天(案例)的最后一条聊天消息 - 我只设法获得其中一个聊天对话(最新一个)的最后一条聊天消息。

预期的结果应该是带有标题和最后一条聊天消息的正在进行的聊天对话列表,例如:

IT 支持聊天

我已经解决了这个问题...

客服聊天

很简单,你只需要重新...

简化表结构:

案例

 id  |      title
-----|-----------------
  1  |  IT-support chat

参赛作品

 id  |    case_id   | time_created
-----|--------------|--------------
 15  |       1      | ...
 16  |       1      | ...

附件

 id  |   entry_id   |              payload
-----|--------------|--------------------------------------------
  1  |      15      | Who solved the issue?
  2  |      16      | I have solved the issue with the meatballs 

此查询仅选择其中一个案例的最后一条聊天消息,而不是每个案例的最后一条聊天消息:

SELECT 
    cases.title AS caseTitle,
    last_chatmsg.payload AS lastChatMsg
FROM
    cases 
LEFT JOIN (
    SELECT
        entries.case_id,
        attachments.payload
    FROM
        entries, attachments
    WHERE
        entries.id = attachments.entry_id
    ORDER BY
        entries.time_created DESC
    LIMIT 1
    )
    last_chatmsg ON last_chatmsg.case_id = cases.id
GROUP BY cases.id

关于如何让它发挥作用的任何想法?

4

1 回答 1

0

每个案例的最新聊天:

SELECT x.case_id, x.id FROM 
  (SELECT case_id, id, ROW_NUMBER(OVER PARTITION BY case_id ORDER BY time_created DESC) rn FROM entries)
WHERE x.rn = 1

把它变成一个 CTE:

WITH mrc AS

    SELECT x.case_id, x.id FROM 
      (SELECT case_id, id, ROW_NUMBER(OVER PARTITION BY case_id ORDER BY time_created DESC) rn FROM entries)
    WHERE x.rn = 1

SELECT * FROM
  cases c
  INNER JOIN mrc m ON c.id = m.case_id
  LEFT JOIN attachments a ON mrc.id = a.entry_id
于 2020-03-05T10:07:32.013 回答