我正在编写MySQL(MariaDB)查询,以获取用户已收到消息的发件人列表。就像在Facebook收件箱中一样,我希望最近的发件人首先出现,我已经通过以下查询:
SELECT DISTINCT user_id_s
FROM messages
WHERE id IN (
SELECT MAX(id)
FROM messages
WHERE user_id_r=390
GROUP BY user_id_s
)
order by id DESC
它似乎工作正常(不确定它是否能像大百万行的大记录一样正常工作?)。但真正的问题是,如果用户收到最后一条消息而不是最后一条消息,则它只按顺序提取。
示例:
用户390已按以下顺序接收来自以下用户的消息:
所以现在用户431是最新的并且出现在列表的顶部,但是如果用户390回复到用户431,则它保持在底部,而我希望它基于最后的交互出现在顶部。
我希望我解释得很好。
编辑:这是一个SQL小提琴:http://sqlfiddle.com/#!9/82417/2
在此示例中,行号为' 573'应该出现在顶部替换#572行,结果的其余部分必须保持相同。另外,具有user_id_s的第二列应该给出' 431'在第一行,就像现在一样。
答案 0 :(得分:0)
" last"的定义:而不是MAX(id)
,您需要
SELECT id
FROM messages
WHERE ...
ORDER BY last_replied DESC
LIMIT 1
缩放:请参阅Groupwise Max。