这是我的 MySQL 数据库结构:
收件人(id、converstation_id、user_id)
对话(id,user_start)
消息(id, user_id, message, conversation_id, time)
我想做的是提取由特定用户或发起的所有对话ID,他是其中一个对话的接收者。并按最后一条消息排序。
我该怎么做?
最佳答案
以下查询将起作用。您必须将 REQUESTED_USER_ID
替换为有效的用户 ID。请注意 SQL 中的 UNION 语句,它连接了两个子查询的结果。然后将 UNION 的结果包装在另一个 SELECT 中,以按开始时间实现排序。
SELECT
conversation_id
FROM (
SELECT
c.id AS conversation_id,
m.time AS start
FROM Conversations c
JOIN Messages m ON m.conversation_id = c.id
WHERE c.user_start = REQUESTED_USER_ID
UNION
SELECT
c.id AS conversation_id,
m.time AS start
FROM Conversations c
JOIN Recipents r ON c.id = r.user_id
JOIN Messages m ON m.conversation_id = c.id
WHERE r.user_id = REQUESTED_USER_ID
) result
ORDER BY start DESC;
关于php - 拉取消息线程如何从数据库中列出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225521/