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
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
SELECT conversation FROM
conversations
WHERE (conversations.from_user = <user parameter>
OR conversations.to_user = <user parameter>)
AND conversations.from_user <> conversations.to_user
2条答案
按热度按时间gr8qqesn1#
您可以使用如下所示的查询,通过会话获取当前用户与最后一条消息的所有会话:
如果需要使用以下方法获取当前用户与最后一条indox消息的所有对话:
但我认为最好的方法是重写数据库方案,并在“conversations”表中添加最后一条消息的id。它将使查询更加优化
更新时间:
如果需要获取与当前用户进行对话的所有用户的列表:
p、 你必须替换
<current_user_id>
到当前用户的实际标识符bkkx9g8r2#