我有 4 张 table :
- 对话
- conversations_users
- 消息
- 用户
对话结构表是:
- id(主键)
- 标题(对话标题)
conversations_users结构表是:
- id(主键)
- conversationID(用户所在的对话 ID)
- userID(与对话 ID 关联的用户)
消息结构表是:
- id(主键)
- 消息(消息文本)
- conversationID(消息所在的对话 ID)
- senderID(发送消息的用户 ID)
- 日期(消息的时间戳)
用户结构表是:
- id(主键)
- 用户名
我想显示用户的所有对话(标题、最后一条消息和最后一条消息时间戳),因此仅显示用户所在的对话。
如何处理 SQL 请求?我想它会是这样的:
SELECT c.title, m.message, m.date
FROM conversation c
INNER JOIN conversation_users cu
ON ...
INNER JOIN messages m
ON ...
INNER JOIN users u
ON ...
GROUP BY u.id
最佳答案
select usr.userID,
cvs.title,
msg.message,
times.date
from conversations_users usr
left join conversations cvs on usr.conversationID = cvs.id
left join messages msg on usr.conversationID = msg.conversationID
left join
(select usr.userID,
MAX(msg.date) as date
from conversations_users usr
left join messages msg on usr.conversationID = msg.conversationID
group by usr.userID) times on times.userID= usr.userID and times.date=msg.date
关于php - 通过用户 ID 选择对话的 SQL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913828/