php - Laravel:语法错误或访问冲突:1055解决方案
问题描述
为什么此查询会导致 SQLSTATE 错误?
SQLSTATE[42000]: Syntax error or access violation: 1055 'database.events.date' isn't in GROUP BY
select `events`.`listing_id`, `events`.`date`, `events`.`listing_name`, count(*) as number_sold
from `events`
where `events`.`date` >= "2020-07-14"
group by `events`.`listing_id`
order by `events`.`date` asc
当我在服务器上手动运行查询时,查询执行没有错误,并获得预期的结果。
具体是什么语法错误,为什么?
解决方案
主要取自Solve Query Failures About ONLY_FULL_GROUP_BY SQL Mode。一篇极好的文章。
解释
从 MySQL 5.7 开始,它们使语法更加严格,以阻止语义不正确的查询运行。调用了一个特定的新规则ONLY_FULL_GROUP_BY
,它可以防止您在使用 GROUP BY 子句时出错。
很容易理解的例子是这样的:
假设我们要从该表中计算网站上最受欢迎的页面:
+----+--------------------+---------+---------------------+
| id | page_url | user_id | ts |
+----+--------------------+---------+---------------------+
| 1 | /index.html | 1 | 2019-04-17 12:21:32 |
| 2 | /index.html | 2 | 2019-04-17 12:21:35 |
| 3 | /news.php | 1 | 2019-04-17 12:22:11 |
| 4 | /store_offers.php | 3 | 2019-04-17 12:22:41 |
| 5 | /store_offers.html | 2 | 2019-04-17 12:23:04 |
| 6 | /faq.html | 1 | 2019-04-17 12:23:22 |
| 7 | /index.html | 3 | 2019-04-17 12:32:25 |
| 8 | /news.php | 2 | 2019-04-17 12:32:38 |
+----+--------------------+---------+---------------------+
你可以简单地写:
SELECT page_url, user_id, COUNT(*) AS visits
-> FROM web_log
-> GROUP BY page_url ORDER BY COUNT(*) DESC;
并得到以下结果:
+-------------------+---------+--------+
| page_url | user_id | visits |
+-------------------+---------+--------+
| /index.html | 1 | 3 |
| /news.php | 1 | 2 |
| /store_offers.php | 3 | 2 |
| /faq.html | 1 | 1 |
+-------------------+---------+--------+
但是该user_id
列代表什么?如果你仔细想想,它的内容是完全随机的。
您需要将其包含在 group_by 子句中,或者将其从您的选择中排除(或者将其包含在诸如count
、min
、max
等的聚合函数中)
所以对我来说,我需要在我的选择中包含其他非聚合列:
select `events`.`listing_id`, `events`.`date`, `events`.`listing_name`, count(*) as number_sold
from `events`
where `events`.`date` >= "2020-07-14"
group by `events`.`listing_id`, `events`.`date`, `events`.`listing_name`
order by `events`.`date` asc
在我的情况下,这给出了预期的数据集。
推荐阅读
- c++ - append %PATH% of many Visual Studio property sheets (.props) additively
- shell - Perl catching STDERR and STDOUT of subprocess
- php - I can not get content from specific url
- sass - Howto add PostCSS plugin to the Gatsby SASS plugin
- oracle - 如何创建删除所有特殊字符和重复记录的过程
- flutter - 未调用 ChangeNotifier 类中的函数
- python - Python NewsApiClient
- php - 如何让 html 字符代码正确显示
- javascript - 使用 axios get 获取请求失败,状态码为 403
- javascript - Jquery spinner在旋转后添加最小值?