Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 MySql:Order by和Group by组合不提供最新记录_Php_Mysql_Sql - Fatal编程技术网

Php MySql:Order by和Group by组合不提供最新记录

Php MySql:Order by和Group by组合不提供最新记录,php,mysql,sql,Php,Mysql,Sql,使用下面的查询,我正在寻找一个解决方案,以获得具有某些条件的最新记录。 但它给了我第一张唱片,不是最新的。我认为这只是一种考虑 请告诉我 SELECT * FROM `contacts` WHERE `id_receiver`=1 GROUP BY `id_thread` ORDER BY created DESC id id_sender id_thread sender_email id_receiver created(datetime) 1 2

使用下面的查询,我正在寻找一个解决方案,以获得具有某些条件的最新记录。 但它给了我第一张唱片,不是最新的。我认为这只是一种考虑 请告诉我

SELECT * FROM `contacts` WHERE `id_receiver`=1  GROUP BY `id_thread` ORDER BY created DESC

id   id_sender   id_thread sender_email   id_receiver      created(datetime)
1    2             2         51             1                2012-03-24 13:44:48
2    4             4         1              5                 2012-04-26 13:46:05
3    2             2         51             1                2012-04-09 12:12:30
所需输出

id   id_sender  id_thread sender_email   id_receiver      created(datetime)
3    2           2         51             1                2012-04-09 12:12:30
我做了一个测试,刚刚交换了order by和group by,给了我一个错误

任何人都可以看看这个?。谢谢


编辑编辑的问题,忘记写id_线程

如果记录按顺序排列,那么您也可以按id排序——如果且仅当它是按顺序创建的——

当您的表中没有
id_线程
列时,您如何按id_线程分组

SELECT * 
FROM contacts 
WHERE id_receiver = 1 
                                 --- GROUP BY id_thread
                                 --- removed 
ORDER BY created DESC
LIMIT 1                          --- only show one row

根据您的评论,您需要的是每个
id\u线程
的最新一行(按创建的
排序),这是一个不同且更复杂的查询。这种查询甚至有一个标记,名为


您知道如果使用groupe by,您必须对这些列使用聚合函数吗?@duke您不能将groupby与order by交换,因为group by不能放在order by之后。您用于Cretaedy的数据类型您创建的输出值在示例数据中不存在,应该是“2012-04-09 12:12:30”?有id_thread,不知何故,我想补充一下,这是最重要的。是的,您的解决方案不适用于我,因为,我需要各种身份证的最新记录。你的问题没有说明这一点。您的结果集返回了1行。
SELECT c.* 
FROM contacts AS c
  JOIN
    ( SELECT id_thread, MAX(created) AS created 
      FROM contacts 
      WHERE id_receiver = 1  
      GROUP BY id_thread
    ) AS g 
    ON (g.id_thread, g.created) = (c.id_thread, c.created) 
WHERE c.id_receiver = 1