语法错误或访问冲突:1055 SELECT列表的表达式#8不在GROUP BY子句中,并且包含非聚合列

wer*_*sam 11 mysql apache cakephp

我尝试了CakePHP 3.x"Bookmaker Tutorial",我一步一步地按照说明进行操作.不幸的是,在第一章的最后我得到了附加的错误:

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #8 of SELECT list
is not in GROUP BY clause and contains nonaggregated column 'wis.Tags.id' which is not
functionally dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

此外,我得到的信息检查我的"BookmarksTags"表,但我不必创建一个.我有点困惑.

Please try correcting the issue for the following table aliases:

BookmarksTags
Run Code Online (Sandbox Code Playgroud)

我已经谷歌我的问题,我发现信息更新"my.cnf"额外的行.我已经尝试但没有发生任何事情.我也检查拼写并从github下载了"bookmarker-tutorial",但我仍然遇到上述错误.

我使用MySQL 5.7.11和PHP 5.6.14.

tad*_*man 22

这是MySQL 5.7中的新功能,并且警告您的查询不明确.

请考虑下表:

id    |   name    |   age    |   points
--------------------------------------------
1         Bob         21         1
2         James       14         1
3         Bob         21         3
4         James       14         2
5         Casey       17         3
Run Code Online (Sandbox Code Playgroud)

如果您执行了以下查询:

SELECT name, age, SUM(points) FROM scores GROUP BY name
Run Code Online (Sandbox Code Playgroud)

然后该name列用于分组.请注意,age可能有多个值,因此它是"非聚合的".您需要做一些事情来折叠这些值.

5.6和之前的行为是根据排序顺序选择第一个,尽管这有时是不可预测的并且会失败.在5.7中,他们首先阻止你这样做.

这里的解决方案是对其进行分组,或者应用类似的聚合运算符MIN().

  • `ORDER BY RAND()`如果你真的不在乎.至少你宣称你完全不关心一致性. (2认同)

Fen*_*wan 13

我正在使用Laravel 5.4并面临同样的问题.
我尝试设置strictfalseconfig/database.php和它的作品.

'connections' => [
    'mysql' => [
        'strict' => false,
    ]
]
Run Code Online (Sandbox Code Playgroud)

然而,编辑SQL查询比抑制它的警告更好.