tp5 mysql5.7 group by报错
时间: 2023-09-04 08:15:45 浏览: 132
在 TP5 中使用 MySQL 5.7,使用 `group by` 语句时可能会遇到错误提示:
```
Expression #x of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
```
这是因为 MySQL 5.7 默认启用了 `ONLY_FULL_GROUP_BY` 模式,它要求 `group by` 子句中的所有列都必须在 `select` 列表中出现,或者作为聚合函数的参数。如果不符合要求,就会报错。
解决方法有两种:
1. 关闭 `ONLY_FULL_GROUP_BY` 模式
在 MySQL 客户端中执行以下命令:
```
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
或者在连接数据库之前添加以下代码:
```php
// 关闭 ONLY_FULL_GROUP_BY 模式
\think\Db::query("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
```
2. 修改 SQL 语句
将 `group by` 子句中的所有列都添加到 `select` 列表中,或者使用聚合函数对其进行聚合。例如:
```sql
SELECT col1, col2, SUM(col3)
FROM table
GROUP BY col1, col2
```
这样就可以符合 `ONLY_FULL_GROUP_BY` 模式的要求,避免了报错。
阅读全文