[英]conversation type inbox messages between two users for a website
我想實現兩個用戶之間的對話類型的收件箱消息,其中對話將在兩個用戶之間分組並顯示在收件箱頁面上,當單擊對話時,總體聊天記錄將顯示在兩個用戶之間....數據庫模式,但未能對兩個用戶之間的對話進行分組。我需要一個查詢來實現此目的。謝謝,這是我的表。
1. 用戶:
2. 對話:
3. 消息:
因此,如果有人知道如何實現此查詢,那么也請幫助我更改我的架構,謝謝
您可以使用如下所示的查詢,通過對話獲得當前用戶的所有對話以及最后一條消息:
SELECT users.id,
users.name,
messages.conversation_id,
messages.message_id,
messages.message_text,
messages.message_date,
messages.seen
FROM
(SELECT conversations.conversation_id,
IF(conversations.from_user = <current_user_id>, conversations.to_user, conversations.from_user) AS interlocutor_id,
max(messages.message_id) AS last_message_id
FROM conversations
LEFT JOIN messages ON conversations.conversation_id = messages.conversation_id
WHERE convesations.from_id = <current_user_id>
OR conversations.to_id = <current_user_id>
GROUP BY conversations.conversation_id) AS t
LEFT JOIN users ON users.id = t.intercolutor_id
LEFT JOIN messages ON messages.message_id = t.last_message_id
如果需要,請使用以下命令獲取當前用戶與上一次indox消息的所有對話:
SELECT users.id,
users.name,
messages.conversation_id,
messages.message_id,
messages.message_text,
messages.message_date,
messages.seen
FROM
(SELECT conversations.conversation_id,
IF(conversations.from_user = <current_user_id>, conversations.to_user, conversations.from_user) AS interlocutor_id,
max(messages.message_id) AS last_message_id
FROM conversations
LEFT JOIN messages ON conversations.conversation_id = messages.conversation_id
WHERE (convesations.from_id = <current_user_id>
OR conversations.to_id = <current_user_id>)
AND messages.user_id <> <current_user_id>
GROUP BY conversations.conversation_id) AS t
LEFT JOIN users ON users.id = t.intercolutor_id
LEFT JOIN messages ON messages.message_id = t.last_message_id
但是我認為,如果您要重寫數據庫方案並在“對話”表中添加最后一條消息的ID,那將是更好的方法。 它將使查詢更優化
更新:
如果需要獲取與當前用戶對話的所有用戶的列表:
SELECT t.conversation_id,
users.id,
users.name
FROM
(SELECT conversation_id,
IF(from_user = <current_user_id>, to_user, from_user) AS interlocutor_id
FROM conversations
WHERE from_id = <current_user_id>
OR to_id = <current_user_id>) AS t
LEFT JOIN users ON users.id = t.intercolutor_id
PS您必須將<current_user_id>
替換為當前用戶的實際標識符
SELECT conversation FROM
conversations
WHERE (conversations.from_user = <user parameter>
OR conversations.to_user = <user parameter>)
AND conversations.from_user <> conversations.to_user
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.