以下是聊天消息和用戶的表結構。MySQL查詢獲取最新的獨特聊天對話
我希望所有對話的最新1條消息進出用戶,例如, User2
ChatMsgs
========
+--------+-----------+----------+-----------+
| ChatID | FKFromUID | FKToUID | Message |
+--------+-----------+----------+-----------+
| 1 | 3 | 2 | Hello1 |
| 2 | 2 | 1 | Hello2 |
| 3 | 2 | 3 | Hello3 |
| 4 | 3 | 2 | Hi1 |
| 5 | 2 | 3 | Hi2 |
| 6 | 3 | 2 | Hi3 |
+--------+-----------+----------+-----------+
Users
======
+--------+----------+
| UserID | Fullname |
+--------+----------+
| 1 | User1 |
| 2 | User2 |
| 3 | User3 |
+--------+----------+
我想要對以下結果按特定用戶進行過濾,例如,用戶2
+--------+----------+---------+
| UserID | Fullname | Message |
+--------+----------+---------+
| 3 | User3 | Hi3 |
| 1 | User1 | Hello2 |
+--------+----------+---------+
正如你可以看到結果爲用戶2,但對於其他用戶,但只有這些記錄無論是在FKFromUID或FKToUID其中用戶2存在設置無信息/列。
下面是我創建的查詢,但如果用戶同時退出「發件人」和「收件人」,則會提供額外的記錄。
select U.UserID
, FullName
, Message
from ChatMsgs C
JOIN
(select max(ChatID) chatID
from ChatMsgs
group
by FKToUID
, FKFromUID
) CC
ON C.ChatID = CC.ChatID
JOIN Users U
ON U.UID = C.FKFromUID
where C.FKToUID = 2
union
select U.UserID, FullName, Message from ChatMsgs C JOIN (select max(ChatID) chatID from ChatMsgs group
by FKToUID, FKFromUID) CC ON C.ChatID=CC.ChatID JOIN Users U ON U.UID=C.FKToUID where C.FKFromUID=2
你嘗試過什麼?你有什麼麻煩? –
請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry