关闭

16.Laravel报错SQLSTATE[42000] Syntax error or access violation 1055 'xxx' isn't in GROUP BY.txt

标签: Laravelmysqlerror1055
4398人阅读 评论(0) 收藏 举报
分类:
2016.11.15


1.问题描述


今天做项目优化时做了个视图来优化查询,创建视图语句为
select `edm_courses`.`cou_id` AS `cou_id`,
`edm_courses`.`cou_name` AS `cou_name`,
`edm_courses`.`tch_id` AS `tch_id`,
`edm_teachers`.`tch_name` AS `tch_name`,
`edm_courses`.`cou_qrcode` AS `cou_qrcode`,
`edm_courses`.`start_time` AS `start_time`,
`edm_courses`.`stop_time` AS `stop_time`,
count(`edm_calls`.`call_id`) AS `call_num` 
from ((`edm_courses` left join `edm_calls` on((`edm_courses`.`cou_id` =

`edm_calls`.`cou_id`))) 
left join `edm_teachers` on((`edm_courses`.`tch_id` =

`edm_teachers`.`tch_id`))) 
group by `edm_courses`.`cou_id`。
然后在Laravel中创建了模型Course,然后进行查询
Course::where('tch_id',8)->get();
结果报错:
 SQLSTATE[42000]: Syntax error or access violation: 1055 'edm_courses.cou_name' isn't in GROUP BY


2.解决过程


查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含

ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在group by 中。
即 select x,y from xxx group by x,y
否则就会报错

参考链接:http://stackoverflow.com/questions/25800411/mysql-isnt-in-group-by




但是查看自己的配置my.cnf发现在sql_mode中并没有ONLY_FULL_GROUP_BY这个值,然后在终端和navicat中使用运行sql语句
select * from view where tch_id = 8;
发现并没有报错,可以正确输出结果,由此猜想并不是数据库配置的原因,应该是laravel框架的原因


然后去查看Laravel的配置文件,config/database.php,查找mysql的配置,
'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => env('DB_PREFIX',''),
            'strict' => true,
            'engine' => null,
        ],
发现有个strict项,默认为true,上网也没有查找到相关解释,根据字面意思猜测可能为是否开启严格模式,将其修改为false,再次测试发现问题解决,可以输出正确结果

3.总结


在mysql的配置中,sql_mode的ONLY_FULL_GROUP_BY值代表group by字句中的字段必须全部包括select中的字段,

Laravel中也有相对应的配置项,在使用laravel时应该注意。

暂时还不知道strict配置项的具体意义,有待查证

1
0
查看评论

SQLSTATE[42000]: Syntax error or access violation: 1055 'kf_local.g.group_name' isn't in GROUP BY

这是 ThinPHP 中的一段取数据的代码:$result = $this->field('g.group_code,g.group_name,count(m.member_code) AS member_num,c.company_name,u.user_uid') ...
  • Peter_Zhao_Feng
  • Peter_Zhao_Feng
  • 2015-08-26 10:31
  • 2414

安装Magento报错:SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'perio

在安装Magento ver 1.6.1.0的时候,每逢到设置好数据库,要继续下一步的时候,就会进入下面的一个错误页面,再怎么搞也过不去。 There has been an error processing your request Error in file: "C:\wa...
  • suese
  • suese
  • 2014-02-20 10:27
  • 2863

16.Laravel报错SQLSTATE[42000] Syntax error or access violation 1055 'xxx' isn't in GROUP BY.txt

2016.11.15 1.问题描述 今天做项目优化时做了个视图来优化查询,创建视图语句为 select `edm_courses`.`cou_id` AS `cou_id`, `edm_courses`.`cou_name` AS `cou_name`, `edm_courses`.`tch...
  • Darry_Zhao
  • Darry_Zhao
  • 2016-11-15 19:01
  • 4398

mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg

mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'yunva_changke.u.user_id'; ...
  • reblue520
  • reblue520
  • 2016-09-14 20:01
  • 7935

SQL Error: 1064, SQLState: 42000错误原因

原来是用了order! 保留字被引起来后可以用作识别符。如果在表中使用这些会报1064,42000错误。 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY ...
  • Little_Sow
  • Little_Sow
  • 2015-04-08 22:14
  • 3440

SqlServer链接服务器配置及其在作业更新时出现 [SQLSTATE 42000](错误 7410)的分析处理

在进行一些企业应用开发时候,经常地需要在Sqlserver2000里面,直接的调用其它数据库的数据,来实现数据共享和更新,当创立链接服务器之后,关于调用数据时候的方案,一般分为两种:1。当远程表数据量较小几百条或更小可以采用直接调用方案,直接在引用时候,用sql查询;例如:select * from...
  • hissan
  • hissan
  • 2005-06-11 13:53
  • 8807

排查MYSQL42000错误

第一步:错误定位:因为原来的HQL很复杂,将其改为简单的查询看结果,但还是一样的错误: Hibernate: from TSeal18:26:00,330  WARN JDBCExceptionReporter:77 - SQL Error: 1064, SQLState: 42...
  • apollo_ts
  • apollo_ts
  • 2009-09-15 18:29
  • 19812

laravel5.4下的group by报错

使用ORM查询数据显示这个错,这是因为laravel使用了开启了mysql的严格模式所以 如果要关闭的话,我们需要找到config/database.php这个文件,然后将 mysql下的这个改为false;就会关闭。 既然说严格模式那什么是样模式呢。据我所知在mysql在5.7有一...
  • linyunping
  • linyunping
  • 2017-11-10 12:03
  • 145

sql_mode=only_full_group_by研读

MySQL 5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。比如下表game: id group_id name score 1 A 小刚 20 2 B 小明 19 3 B 小...
  • Allen_Tsang
  • Allen_Tsang
  • 2017-02-06 13:45
  • 11891

SQL Error: 1064, SQLState: 42000错误原因

保留字被引起来后可以用作识别符。如果在表中使用这些会报1064,42000错误。 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY ...
  • backzero
  • backzero
  • 2013-09-22 20:25
  • 2771
    个人资料
    • 访问:43585次
    • 积分:615
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论