Pat*_*eck 7 php mysql sql codeigniter
我正在从我的数据库中提取一些对话.它们按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
Run Code Online (Sandbox Code Playgroud)
邮件表
用户表(片段)
这是当前的工作代码.所述SecretAgent发送的消息更新的比邮件从该机构,它应当表示代替
遗憾的是,MySQL 对子句的内容非常宽松GROUP BY
,除非将所有列都包含在GROUP BY
. 从来不建议SELECT *
在连接查询中这样做,但我们暂时保留它。您需要做的是执行子查询联接,该子查询联接按日期获取用户的最新消息,并与其余列联接。
SELECT \n /* Don't actually do this. Be explicit about columns and assign aliases where their names collide */\n users.*,\n users_info.*,\n mail.*\nFROM\n `users`\n JOIN `mail` ON `users`.`id` = `mail`.`user_from`\n JOIN `users_info` ON `users_info`.`user_id` = `mail`.`user_from`\n /* Joined subquery gets most recent message from each user */\n JOIN (\n SELECT user_from, MAX(date) AS date\n FROM mail\n WHERE user_to = '1'\n GROUP BY user_from\n /* Joined back to the main mail table on user_from and date */\n ) most_recent ON mail.user_from = most_recent.user_from AND mail.date = most_recent.date\n WHERE `user_to` = \xc2\xa0'1'\n
Run Code Online (Sandbox Code Playgroud)\n\n编辑已更新以显示所有最近的发件人,而不仅仅是一个。
\n 归档时间: |
|
查看次数: |
166 次 |
最近记录: |