PHP-如何同时使用ORDER BY和GROUP BY

PHP-如何同时使用ORDER BY和GROUP BY,php,mysql,database,group-by,Php,Mysql,Database,Group By,我创建了一个表,其中包含消息、发件人、收件人、时间我希望按发件人分组和按时间排序这是我的代码 $query= mysql_query("SELECT * FROM `table` ORDER BY `time` GROUP BY `sender`")or die(mysql_error()); while($arr = mysql_fetch_array($query)){ $num = mysql_num_rows($query); $msg = $arr ['message']; echo

我创建了一个表,其中包含
消息、发件人、收件人、时间
我希望按发件人分组和按时间排序这是我的代码

$query= mysql_query("SELECT * FROM  `table` ORDER BY `time` GROUP BY `sender`")or die(mysql_error());
while($arr = mysql_fetch_array($query)){
$num = mysql_num_rows($query);
$msg = $arr ['message'];
echo '</br>';
echo $msg;
}
$query=mysql\u query(“从`表'中选择*按`时间'排序`按`发件人'分组”)或die(mysql\u error());
while($arr=mysql\u fetch\u数组($query)){
$num=mysql\u num\u行($query);
$msg=$arr['message'];
回音“
”; echo$msg; }
这说明了这个错误

您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行“groupby
sender
”附近使用的正确语法

那么如何解决这个问题呢

谢谢

克劳斯请注意你的优先顺序。在对结果进行分组后,应该对其进行排序

"SELECT * FROM  `table`  GROUP BY `sender` ORDER BY `time`"

注意你的优先顺序。在对结果进行分组后,应该对其进行排序

"SELECT * FROM  `table`  GROUP BY `sender` ORDER BY `time`"
试试这个代码

 $query= mysql_query("SELECT * FROM  `table`  GROUP BY `sender` ORDER BY `time` ")or  die(mysql_error());
                                             // ^^--will be before order                    
    $num = mysql_num_rows($query);  // out of the while loop
    while($arr = mysql_fetch_array($query)){
    $msg = $arr['message'].'<br />';
           // ^^--remove space here
    echo $msg;
    }
$query=mysql\u query(“按发件人分组,按时间排序”)或die(mysql\u error());
//^^--将在下订单之前
$num=mysql_num_rows($query);//不在while循环中
while($arr=mysql\u fetch\u数组($query)){
$msg=$arr['message'].
; //^^——删除此处的空格 echo$msg; }
试试这段代码

 $query= mysql_query("SELECT * FROM  `table`  GROUP BY `sender` ORDER BY `time` ")or  die(mysql_error());
                                             // ^^--will be before order                    
    $num = mysql_num_rows($query);  // out of the while loop
    while($arr = mysql_fetch_array($query)){
    $msg = $arr['message'].'<br />';
           // ^^--remove space here
    echo $msg;
    }
$query=mysql\u query(“按发件人分组,按时间排序”)或die(mysql\u error());
//^^--将在下订单之前
$num=mysql_num_rows($query);//不在while循环中
while($arr=mysql\u fetch\u数组($query)){
$msg=$arr['message'].
; //^^——删除此处的空格 echo$msg; }
如何使用自联接来获取每个组的最大/最小/something-n行

在您的情况下,它可以应用于您想要的效果,如下所示:

SELECT * FROM
(SELECT group_id, MAX(`yourdate`) AS yourdate FROM tbl_name GROUP BY group_id)
AS x JOIN tbl_name USING (`group_id`,yourdate);

如何使用自连接来获取每个组的最大/最小/某些-n行

在您的情况下,它可以应用于您想要的效果,如下所示:

SELECT * FROM
(SELECT group_id, MAX(`yourdate`) AS yourdate FROM tbl_name GROUP BY group_id)
AS x JOIN tbl_name USING (`group_id`,yourdate);

尝试:从
表中选择*按
发件人分组
时间下单
尝试:从
表中选择*按
发件人分组
时间下单
如何从大到小排序?在查询结束时添加DESC?谢谢这是我的建议problem@Klaus贾斯珀:还有一个问题——你不能问问题:-)如何从大到小排序?在查询末尾添加DESC?谢谢这是我的建议problem@Klaus贾斯珀:还有一个问题-你不能问问题:-)谢谢,现在我想在
时间
之前回复msg订单,那么我该怎么做呢?请给我看一个表格的例子,这样我就可以知道为什么它没有排序了。谢谢,现在我想在
时间
之前回显msg order,那么我该怎么做呢?请给我看一个桌子的例子,这样我就可以知道为什么它没有点餐了。?