mysql ORDER BY和 GROUP BY

今天把网站的mysq版本更新到最新版本了为5.7  在查询语句的时候出现了一个错误语句  :

ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘g2yx_yy.u.login_time‘ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这个语句的错误是 order by 的语句中 没有依赖于group by语句中    下面是我之前写的错误语句

$myGameData = Db::name(‘user_played‘)    ->alias(‘u‘)    ->join(‘game g‘,‘g.id = u.game_id‘)    ->join(‘area a‘,‘a.id = u.area_id AND a.game_id = u.game_id‘)    ->field($condition[‘field‘])    ->where($condition[‘where‘])    ->group(‘u.area_id‘)    ->order(‘u.login_time DESC‘)    ->select();

上面也说到了为啥报错 后面把sql语句变为
$myGameData = Db::name(‘user_played‘)    ->alias(‘u‘)    ->join(‘game g‘,‘g.id = u.game_id‘)    ->join(‘area a‘,‘a.id = u.area_id AND a.game_id = u.game_id‘)    ->field($condition[‘field‘])    ->where($condition[‘where‘])    ->group(‘u.area_id,u.login_time‘)    ->order(‘u.login_time DESC‘)    ->select();

就能把问题解决了
				
时间: 2024-11-05 13:32:01

mysql ORDER BY和 GROUP BY的相关文章

mysql 中order by 与group by的顺序

mysql 中order by 与group by的顺序 是: select from where group by order by 注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效.要查出group by中最大的或最小的某一字段使用 max或min函数. 例: select sum(click_num) as totalnum,max(update_time) as upd

关于MySQL与SQLLite的Group By排序原理的区别

当我们对一个表的记录进行group by的时候,在未明确使用sum.min.max等聚合函数的时候,group by 的排序规则,如下对比了MYSQL和SQLLite 大家都知道,group by的时候,数据库是遍历数据库表的所有记录进行匹配处理的. 下面的SQL目的是为了查询表中groupid相同的记录中,最新时间的一条消息,给出mysql和sqllite的语句区别: MYSQL语句 SELECT * FROM( SELECT t.id,t.data_id,t.send_username,t.

mysql order by 排序的问题

参考博客http://blog.csdn.net/hollboy/article/details/13296601 mysql order by 的排序在今天时候遇到了问题 情景是:将排序的字段设置成varchar类型了,然后排序时候并没有按从大到小的顺序 按照图中的顺序应该是正序,9排在最上边,但是实际上是666排在最上边 解决办法之一 实际情况是先按最左边的开始排序然后在一位一位比下去,这里在写sql时候的解决办法可以是加0,或者前面加上--也可以哦 解决办法之二 将字段类型换成int类型看

【MYSQL】select from group by

group by mysql> select * from t_user group by lvl; +-----+-------+----------+------+--------+ | uid | uname | tel | lvl | salart | +-----+-------+----------+------+--------+ | 1 | alex | 23131231 | A | 1100 | | 3 | kit | 87416574 | B | 1200 | | 4 | p

MySQL Order By Rand()效率【转载】

最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描.但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机. 但是真正测试一下

转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题

SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同. SQL UNION 语法 SELECT column_name(s) FROM tab

MYSQL随机抽取查询 MySQL Order By Rand()效率问题

MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机抽取实现方法 要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND

mysql order by多字段排序

mysql order by多字段排序,在同一表中必须按字段顺序,否则以最后一字段的排序为准,其他无效. 如:ORDER BY `user`.`state` DESC , `user`.`order_by` ASC state字段在order_by字段前面

Mysql Order By 字符串排序,mysql 字符串order by

Mysql Order By 字符串排序,mysql 字符串order by ============================== ?Copyright 蕃薯耀 2017年9月30日 http://fanshuyao.iteye.com/ 一.问题描述: Mysql排序时如果用的的字段为字符串型的,排序规则是这样的:如1,10,2,20,3,4,5,这种排序是按照字符从第一个字符开始比较出来的,但不是我想要的,我想要的是:1,2,3,4,5--,10,20这种. 二.解决方案 排序时,把