Mysql 为什么我不能运行此查询?
我正在尝试运行此查询Mysql 为什么我不能运行此查询?,mysql,laravel,eloquent,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]:语法错误或访问冲突:1055'mte30.test\u answers.created\u at'不在按SQL分组中:选
$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]:语法错误或访问冲突:1055'mte30.test\u answers.created\u at'不在按SQL分组中:选择日期\u FORMATcreated\u at,%m-%d-%Y作为从测试\u answers中获取的日期,其中用户\u id=2按测试\u id分组
我在PHPMyAdmin上试过,效果很好。
有人能告诉我为什么用雄辩的语言不起作用吗
谢谢这在严格模式下不起作用的原因是您尚未在创建时指定要使用的查询。如果使用GROUP BY,并且选择的列未分组或聚合,则可能无法收到正确的数据
您在测试答案中有多行,但MySQL不知道您关心的是创建了哪一行。您可以通过简单地告诉MySQL哪个在创建时返回,比如MAXcreated在选择最新的,或者MINcreated在选择最旧的来修复这个问题。这在strict模式下不起作用的原因是您没有在查询中指定创建时使用的。如果使用GROUP BY,并且选择的列未分组或聚合,则可能无法收到正确的数据
您在测试答案中有多行,但MySQL不知道您关心的是创建了哪一行。您可以通过简单地告诉MySQL哪个在创建时返回,比如MAXcreated在选择最新的,或者MINcreated在选择最旧的来修复这个问题。在config/database.php中检查您的配置;如果在活动连接中看到'strict'=>true,可以将其更改为'strict'=>false,以消除该错误。不过,我不确定这样做是否有任何缺点/缺点;但是,我试过了,但没有成功。你记得清除配置缓存吗?每个测试id的创建日期都相同吗?这与SQL注入无关,与MySQL的严格模式有关。在config/database.php中检查你的配置;如果在活动连接中看到'strict'=>true,可以将其更改为'strict'=>false,以消除该错误。不过,我不确定这样做是否有任何缺点/缺点;但是,我试过了,但没有成功。你记得清除配置缓存吗?每个测试id的创建日期都相同吗?这与SQL注入无关,与MySQL的严格模式有关。很高兴我能提供帮助,你可以选择这个作为解决问题的公认答案。很高兴我能提供帮助,您可以选择此作为结束问题的公认答案。