【发布时间】:2011-06-24 18:29:10
【问题描述】:
好的,我正在尝试以此为基础,但还没有完全确定:GROUP BY and ORDER BY
基本上,想要查询在当前登录用户和任何其他用户之间的每个“线程”中查找最新消息,但通过一个平面(非“线程”)消息表:
messages {
id,
from_uid,
to_uid,
message_text,
time_added
}
假设当前用户的 uid 为“1”,每个“线程”中的最新消息可能是来自那个用户,或者到那个用户(另一个方始终由 thread_recipient 表示):
SELECT a.*,thread_recipient
FROM messages a
JOIN (SELECT IF(from_uid = '1',to_uid,from_uid) AS thread_recipient,
MAX(time_added) AS recency
FROM messages
WHERE (from_uid = '1' OR to_uid = '1')
GROUP BY thread_recipient) b ON thread_recipient = (IF(a.from_uid = '1',a.to_uid,a.from_uid))
AND b.recency = a.time_added
ORDER BY a.time_added DESC
但我担心这不会正常工作,可能同时发送的消息最终会返回给错误的用户?
我的 WHERE 条件是否放错地方了?
非常感谢任何智慧。
【问题讨论】:
标签: mysql sql group-by sql-order-by messaging