簡體   English   中英

MySQL:在INBOX中每位用戶顯示最后一條消息

[英]MySQL: Show last messages in INBOX one per User

這是我的問題,在收件箱中僅顯示了我從一個用戶收到的多條消息。 我需要像Facebook一樣顯示我的收件箱。 每一位用戶僅顯示一條消息。 很像對話視圖。 其中,我和用戶之間的最后一條消息顯示在收件箱中(他的最后一條消息或我最后給他的回復)。

我嘗試了GROUP BY,但結果不准確。 某些最近的消息不會顯示,並且不會按上次對話的日期進行排序。

這是我的數據庫結構:

+-----------------------------------------------------------------------------------+
|                                  users_messages                                   |
+-----------------------------------------------------------------------------------+
| message_ID | sender |receiver| date | subject | body | unread | delete1 | delete2 |
+-----------------------------------------------------------------------------------+

+---------------------+
|        members      |
+---------------------+
| id | username | ... 
+----+----------+-----+

這是我當前的查詢:

$result = $DB->query("SELECT p.*, p.sender as sender, m.*
FROM  " . DB_PREFIX . "messages p
LEFT JOIN " . DB_PREFIX . "members m ON p.sender=m.member_id
WHERE p.receiver='" . $SESSION->conf['member_id'] . "' AND delete2=0
GROUP BY p.sender ORDER BY p.senddate DESC
LIMIT " . (($page - 1) * $PREFS->conf['per_page']) . ", " . $PREFS->conf['per_page']);
SELECT t1.*, t2.*
FROM 
  users_messages AS t1
LEFT JOIN members AS t2
  ON t1.sender = t2.id
LEFT JOIN users_messages AS t3
  ON t1.sender = t3.sender AND t1.receiver = t3.receiver 
    AND t1.message_ID < t3.message_ID
WHERE (t1.sender = @userid OR t1.receiver = @userid) AND t3.message_ID IS NULL

我尚未測試過,因此可能有所疏忽,但一個選擇是,您可以對發件人和收件人和t1.message_ID <t3.message_ID進行user_messages自聯接。 因為來自t1的一對消息之間的最新消息在t3中沒有聯接候選者,並且它是左聯接,所以t3列將為空,您可以在where子句中選擇該消息以獲取最新消息。

暫無
暫無

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

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