Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用“分组方式”获取最新条目_Php_Mysql_Sql_Codeigniter - Fatal编程技术网

Php 使用“分组方式”获取最新条目

Php 使用“分组方式”获取最新条目,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我正在从数据库中提取一些对话。它们由来自列的用户进行分组 到目前为止,它输出最早的消息。我想让它显示最新消息 最简单的方法是什么 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` ORD

我正在从数据库中提取一些对话。它们由来自列的用户进行分组

到目前为止,它输出最早的消息。我想让它显示最新消息

最简单的方法是什么

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
邮件台

用户表(代码段)

这是当前的工作代码。秘书长发送了一封比它应该显示的机构的邮件要新的邮件
不幸的是,MySQL对
GROUP BY
子句的内容非常宽容,这会产生不可靠的结果,除非您将
GROUP BY
中的所有列都包括在内。不建议在联接查询中
选择*
,但我们暂时不做。您需要做的是执行子查询联接,该联接按日期获取用户的最新消息,并与其余列联接

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'

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

@xQbert为什么?最新的邮件是以最大日期猜测该邮件作为ID的邮件,为什么不按
mail.ID desc
订购?或者是从不同的地方插入的电子邮件,不需要更高的id就可以成为最新的电子邮件?这不会起作用,它仍然会选择最旧的电子邮件one@MichaelBerkowski感谢您的留言:“今年五月(可能会)仍然会产生不可靠的结果。MySQL允许SELECT中的COL不在GROUP BY中,ofen会导致其他COL的值不确定“请发布您的表架构。要正确执行此操作,需要提供更多信息。在PHPMyAdmin中运行它时,此功能似乎有效。现在我将深入研究CodeIgniter文档,看看如何使用活动记录来实现这一点。谢谢!:-)@njk只是希望保持活跃——我不再回答太多了。有些人似乎以10万英镑的价格“退休”。我可能还有三天…@MichaelBerkowski退休派对?@njk在我还活着的时候不会。也许到时候我会躲起来,把梅塔变成巨魔。