Php 在Laravel中使用Join和Group By进行计数
我们有以下几张表 我们希望输出如下 这是我们到目前为止所做的,我指的是查询Php 在Laravel中使用Join和Group By进行计数,php,laravel,Php,Laravel,我们有以下几张表 我们希望输出如下 这是我们到目前为止所做的,我指的是查询 $enrolledStudents = Student::select('students.subject_id', 'subjects.subject_name as subject_name', DB::raw('count(subject_id) as total')) ->leftJoin('subjects', 'subjects.id', '=', 'students.subjec
$enrolledStudents = Student::select('students.subject_id', 'subjects.subject_name as subject_name', DB::raw('count(subject_id) as total'))
->leftJoin('subjects', 'subjects.id', '=', 'students.subject_id')
->groupBy('students.subject_id')
->get();
此查询不起作用
语法错误或访问冲突:1055“subject.subject\u name”不在GROUP BY中
我们可以做些什么来获取预期输出只选择聚合或存在于group by子句中的列,例如
主题名称
未聚合或group by子句的一部分,因此在严格模式下,数据库将抛出此错误,因为不允许此操作
此外,您应该使用科目模型作为联接的左表,这样即使没有注册学生,您也可以获得所有科目
Subject::from('subjects as s')
->select('s.subject_name', DB::raw('count(s.id) as total'))
->leftJoin('students as st', 's.id', '=', 'st.subject_id')
->groupBy('s.subject_name')
->get();
或者,如果您已经定义了科目和学生模型之间的关系,则可以使用withCount()
如果您确实不想使用任何其他列进行分组,则应在config\database.php文件中将strict设置为false,并运行php artisan config:clear和config:cache
'mysql' => [
'strict' => false,
],
你能定义不工作吗?这个查询的结果是什么?你能加上你的邮资吗,请检查一下!谢谢,它成功了,我希望我能做第二个,但今天必须发布修复程序:P@MissingSemicolon这对开发者来说是可怕的一天:)你可以在发布后计划,干杯一个问题,我如何从主题表中获取主题id?我试过这样做,但我得到了以下错误
语法错误或访问冲突:1055'db.subjects.id'不在groupBy
@missing分号您需要在groupBy中添加subject\u id
,也可以像select('subject\u id','subject\u name')
和groupBy('subject\u id','subject\u name')
'mysql' => [
'strict' => false,
],