Mysql 使用线程和消息构建收件箱查询
因此,我有两个表用于处理消息Mysql 使用线程和消息构建收件箱查询,mysql,Mysql,因此,我有两个表用于处理消息线程和消息 messages: id | thread | user_from | user_to | text | created threads: id | user_from | user_to | created | status 我想构建一个查询,通过以下方式获取线程: 该线程的最新消息 该线程的id 到目前为止,我一直在处理这个问题,首先获取所有线程(当然有适当的限制),然后分别获取每个线程的最新消息 有什么想法吗 更新: 表关系:消息线程=线程id在
线程
和消息
messages:
id | thread | user_from | user_to | text | created
threads:
id | user_from | user_to | created | status
我想构建一个查询,通过以下方式获取线程:
表关系:
消息
线程
=线程
id
在我的头顶上:
select t.id, max(m.id) as last_message_id
from threads t
left outer join messages m on m.thread = t.id
group by t.id
SELECT t.id, m.* FROM threads t
INNER JOIN messages m ON m.thread = t.id
WHERE m.id =
(SELECT id FROM messages WHERE thread = t.id ORDER BY id DESC LIMIT 1);
[编辑]经过测试,它似乎工作正常。我想:
SELECT t.id, m.* FROM threads t
INNER JOIN messages m ON m.thread = t.id
WHERE m.id =
(SELECT id FROM messages WHERE thread = t.id ORDER BY id DESC LIMIT 1);
[编辑]经过测试,似乎效果良好。试试这一款
SELECT a.id AS ThreadID,
c.`text` AS LatestMessage
FROM threads a
INNER JOIN
(
SELECT thread, max(created) maxCreated
FROM messages
GROUP BY thread
) b on a.id = b.thread
INNER JOIN messages c
on a.id = c.thread AND
b.maxCreated = c.created
试试这个
SELECT a.id AS ThreadID,
c.`text` AS LatestMessage
FROM threads a
INNER JOIN
(
SELECT thread, max(created) maxCreated
FROM messages
GROUP BY thread
) b on a.id = b.thread
INNER JOIN messages c
on a.id = c.thread AND
b.maxCreated = c.created
这两个表有什么关系?@johntotetwo更新了问题。好的,我刚刚在下面发布了我的答案。这两个表有什么关系?@johntotetwo更新了问题。好的,我刚刚在下面发布了我的答案。我假设最新的ID是最新的消息-如果没有,将子查询更改为使用
created
字段。您确定子查询上可以访问t.id
吗?确定-或者您永远无法从主查询限制子查询。我假设最新的id是最新的消息-如果不是,将子查询更改为使用created
字段。是否确实可以在子查询上访问t.id
?确定-或者永远无法从主查询限制子查询。