mysql - 为什么我不能运行这个查询?

标签 mysql laravel eloquent

我正在尝试运行此查询

$tableDate = DB::select('SELECT (DATE_FORMAT(created_at,"%m-%d-%Y")) as 
   dateTaken FROM `test_answers`WHERE user_id= '.$id.' GROUP BY (test_id) 
');

但是它给我这个错误

SQLSTATE[42000]: Syntax error or access violation: 1055 'mte30.test_answers.created_at' isn't in GROUP BY (SQL: SELECT (DATE_FORMAT(created_at,"%m-%d-%Y")) as dateTaken FROM test_answers WHERE user_id= 2 GROUP BY (test_id) )

我在 PHPMyAdmin 上试过了,它成功了。 有人能告诉我为什么它不能使用 Eloquent 工作吗?

谢谢

最佳答案

这在严格模式下不起作用的原因是因为您没有在查询中指定要使用哪个 created_at。如果您使用 GROUP BY 并且选择的列未分组或聚合,您可能不会收到正确的数据。

您在 test_answers 中有多行,但 MySQL 不知道您关心的是哪一行的 created_at。您可以通过简单地告诉 MySQL 返回哪个 created_at 来解决这个问题,比如 MAX(created_at) 选择最近的,或者 MIN(created_at) 选择最旧的。

关于mysql - 为什么我不能运行这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448218/

相关文章:

Laravel 4.1 Eloquent - 使用 whereHas 的自定义连接

mysql - 数据库 ER 模型工作日可用性

MySQL:更新查询的奇怪行为(错误 1062 重复条目)

MySQL触发器将数据插入不同的DB

javascript - 在 VueJS 中从父组件中引用子组件的索引

php - 如何在 Laravel 5.8 中将日期从 "Thu Apr 11 2019 00:00:00 GMT+0200"格式化为 MySQL 格式?

php - Sqlite 在单元测试中忽略数据库约束

Laravel 查询 - 获取最畅销的商品

php - Laravel 中的 setPasswordAttribute

php - MySql 正确连接复杂数据/表