gpt4 book ai didi

php - 使用 GROUP BY 获取最新条目

转载 作者:可可西里 更新时间:2023-11-01 06:37:53 26 4
gpt4 key购买 nike

我正在从我的数据库中提取一些对话。它们按 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

邮件表

enter image description here

用户表(片段)

enter image description here

这是当前的工作代码。 SecretAgent 发送的消息更新,而不是它应该显示的代理机构的邮件 enter image description here

最佳答案

不幸的是,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'

编辑更新为显示所有最近的发件人,而不是仅显示一个。

关于php - 使用 GROUP BY 获取最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com