簡體   English   中英

查詢以在“線程化”視圖中獲取最新消息

[英]Query to get recent messages in a 'threaded' view

我正在嘗試重建現有的消息傳遞系統,使其看起來類似於Twitter的DM服務。 目前,我只向用戶顯示未讀消息,但我想在單個“線程”中顯示2個用戶之間發送的消息,如下所示:

在此處輸入圖片說明

這是我當前的數據庫結構和一些示例數據: http : //sqlfiddle.com/#!2/574e3/1/0

我試圖通過分解逐步構建查詢,但是我很困惑。 這是我已采取的步驟的列表:

1.獲取兩個用戶之間發送的消息列表

SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1

2.在兩個用戶之間的“對話”中顯示最后一條消息

SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
ORDER BY timestamp DESC

3.按user_id分組對話(顯然,這是用戶名稱,在生產應用程序中有一堆聯接)。

SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
GROUP BY uc_user_messages.user_id_1 AND uc_user_messages.user_id_2
ORDER BY timestamp DESC 

這就是我遇到的問題...問題是,將顯示在兩個用戶之間的對話中發送的第一條消息,而不是最新的消息: http : //sqlfiddle.com/#!2/942fb/ 2

我該怎么辦? 希望我不必進行任何主要的數據庫設計更改。 任何幫助是極大的贊賞。

干杯,

喬爾

SELECT  *
FROM    uc_user_messages
WHERE   (LEAST(user_id_1, user_id_2),GREATEST(user_id_1, user_id_2),TIMESTAMP) 
        IN 
        (
            SELECT  LEAST(user_id_1, user_id_2) AS x,
                    GREATEST(user_id_1, user_id_2) AS y,
                    max(TIMESTAMP) AS msg_time
            FROM    uc_user_messages
            GROUP   BY x, y
        );

輸出值

╔════╦═══════════╦═══════════╦═════════════════╦════════════╦══════╗
║ ID ║ USER_ID_1 ║ USER_ID_2 ║     MESSAGE     ║ TIMESTAMP  ║ READ ║
╠════╬═══════════╬═══════════╬═════════════════╬════════════╬══════╣
║  3 ║         1 ║         2 ║ third message   ║ 1366577336 ║    1 ║
║  4 ║         2 ║         0 ║ a message reply ║ 1366577346 ║    1 ║
╚════╩═══════════╩═══════════╩═════════════════╩════════════╩══════╝

假設我已經正確理解了您,並且您正在尋找用戶1和2之間的最新消息,那么這是一種實現方法。

SELECT * FROM uc_user_messages
WHERE id = (
  SELECT MAX(id) FROM uc_user_messages
  WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
)

但是,這取決於id的升序,這可能不是一個好主意。 一種替代方法是使用timestamp ,但這只有在可以保證對於那些用戶唯一的情況下才有效。

暫無
暫無

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

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