簡體   English   中英

使用鏈接表和 ORDER 和 LIMIT 離開加入 Mysql

[英]Left joining Mysql with link table and ORDER and LIMIT

我正在開發具有表格casesentriesattachments的聊天功能。 每個聊天(案例)都有包含一個或多個附件的聊天條目。 附件可以是例如文本消息或視頻消息。 現在我正在努力在聊天概述中顯示特定聊天(案例)的最后一條聊天消息 - 我只能設法獲得其中一個聊天對話(最新一個)的最后一條聊天消息。

預期結果應該是帶有標題和最后一條聊天消息的正在進行的聊天對話列表,例如:

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

有關如何使其工作的任何想法?

每個案例的最新聊天記錄:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM