【发布时间】:2018-03-23 02:11:16
【问题描述】:
mysql 新版本的问题 only_full_group_by
我需要使用 Group by (col_id) 和 order by (date) 来获取表值 我在mysql中的代码如下:
SELECT COUNT(created_date) AS `Rows` , ANY_VALUE(id)
FROM `table` where `my_id` = 1 AND `status` = '0'
GROUP BY `id`
ORDER BY `created_date` DESC
我收到如下错误
SQLSTATE[42000]:语法错误或访问冲突:1055 ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“database.table.created_date” ;这与 sql_mode=only_full_group_by 不兼容
有人说解决方法吗?
提前谢谢...
【问题讨论】:
-
禁用 only_full_group_by
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; -
GROUP BY错误的全部意义在于它们表示逻辑错误。不可能ORDER BY created_date,因为SELECT子句中没有这样的表达式,并且每个组可能包含created_date的两个或更多不同的值。哪一个用于排序?禁用sql_mode并不能解决问题,只会让 MySQL 返回不确定的结果。
标签: php mysql phpmyadmin mysql-error-1055