0
我试图从某个线程获取最后一条消息,但似乎无法获得我的查询权。 我似乎没有从某个线程获取最后一条消息。MySQL获取最后一条消息(VarChar)
介绍
我用3个表 - 信息,message_users,message_threads
所有消息都属于某个线程(有点像论坛和帖子是如何工作的?) 用户可以添加多个用户到某个线程,所以多个用户可以在同一个线程中互相发送消息。
数据库结构
messages table
id | t_id | u_id | message | time
--------+---------+--------+-----------+--------
1 | 1 | 1 | hello! | timestamp
2 | 1 | 2 | hi! | timestamp
3 | 2 | 1 | testing | timestamp
message_threads
id | author | subject
------+---------+-----------
1 | 1 | Subject 1
2 | 3 | Subject 2
3 | 2 | Subject 3
message_users
id | t_id | u_id | read | nonotice
------+---------+--------+--------+----------
1 | 1 | 1 | 0 | 0
2 | 1 | 2 | 0 | 0
3 | 2 | 1 | 1 | 0
查询
这是我使用的查询,它几乎工程,除了它没有得到最后的ID,无论最后的消息,任何想法? (是的,我已经看了,并寻找以前的问题就问这个问题,但没有能够得到固定的查询基于莫名其妙的答案)
SELECT
m2.message,
mt.id AS thread_id,
max(m.id) AS message_id,
max(m.time) AS time,
mt.subject
FROM message_users AS mu
LEFT JOIN message_threads AS mt ON mt.id = mu.t_id
LEFT JOIN message AS m ON m.t_id = mt.id
INNER JOIN (
select message as messages_text
from message group by t_id
) AS m2 ON m2.id = m.id
WHERE mu.u_id = 1 AND mu.read = 0 AND mu.nonotice = 0
GROUP BY mt.id
ORDER BY m.id DESC
谢谢,我会尝试一下我们的那一刻我回家,我会更新,如果有用。 刚刚更新了额外表格信息的问题。 – user2949138
太棒了,它的工作原理! 与第二个解决方案,因为第一个结果0.05秒,另一个0.0009,也感谢你的建议,当涉及到名称约定:) – user2949138