使用GROUP BY获取最新条目
我正在从我的数据库中抽出一些对话。 它们正在被user_from列分组。
到目前为止,它输出最旧的消息。 我希望它显示最新的消息。
做这件事最简单的方法是什么?
SELECT *
FROM (`mail`)
JOIN `users` ON `users`.`id` = `mail`.`user_from`
JOIN `users_info` ON `users_info`.`user_id` = `mail`.`user_from`
WHERE `user_to` = '1'
GROUP BY `user_from`
ORDER BY `mail`.`date` desc
邮件表
用户表(片段)
这是当前的工作代码。 SecretAgent发送了一条比它应该显示的代理机构邮件更新的邮件
不幸的是,MySQL对GROUP BY
子句的内容非常宽松,除非在GROUP BY
包含所有列,否则会产生不可靠的结果。 从不建议在连接查询中SELECT *
,但现在我们将离开它。 你需要做的是执行一个子查询连接,它按日期为用户获取最新的消息,并与其余列进行连接。
SELECT
/* Don't actually do this. Be explicit about columns and assign aliases where their names collide */
users.*,
users_info.*,
mail.*
FROM
`users`
JOIN `mail` ON `users`.`id` = `mail`.`user_from`
JOIN `users_info` ON `users_info`.`user_id` = `mail`.`user_from`
/* Joined subquery gets most recent message from each user */
JOIN (
SELECT user_from, MAX(date) AS date
FROM mail
WHERE user_to = '1'
GROUP BY user_from
/* Joined back to the main mail table on user_from and date */
) most_recent ON mail.user_from = most_recent.user_from AND mail.date = most_recent.date
WHERE `user_to` = '1'
编辑已更新以显示所有最新的发件人,而不是仅显示一个。
链接地址: http://www.djcxy.com/p/68639.html