有3个表classes(id, name), student_classes(id, class_id, student_id, status) 和teacher_classes(id, class_id, Teacher_id, status)。 [0,1] 中的状态接收值; 我想知道班级的所有信息以及班级中状态 = 1 的学生和教师人数。 所以我试试
$query = (new \yii\db\Query())
->select(['cl.id as cl_id', 'cl.name as clname', 'count(distinct sc.student_id as stdnumbers)', 'count(distinct teacher_id) as tcnumbers'])
->from('classes as cl')
->leftJoin('student_classes as sc', 'cl.id = sc.class_id')
->leftJoin('teacher_classes as tc', 'cl.id = tc.class_id')
->where(['status => 1'])->groupBy(['cl_id']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => false,
]);
没有 where(['status => 1']) 我有所有课程,但学生和老师的数量不正确,因为我得到状态 = 0 的记录,我有真实数字,但不是所有课程,因为没有student_classes 和teacher_classes 的班级是不出来的。 例子
classes(id, name) = [
{1, 'Alpha'},
{2, 'Beta'},
{3, 'Gamma'}
];
student_classes(id, class_id, student_id, status) = [
{1, 1, 1, 0},
{2, 1, 2, 1},
{3, 1, 3, 1}
];
teacher_classes(id, class_id, teacher_id, status) = [
{1, 2, 1, 1},
{2, 1, 1, 1}
];
我希望查询像这样返回
query (cl_id, cl_name, stdnumbers, tcnumbers) = [
{1, 'Alpha', 2, 1},
{2, 'Beta', 0, 1},
{3, 'Gamma', 0, 0}
]
我能做什么?谢谢。
答案 0 :(得分:1)
select * from
classes, student_classes
where classes.id = student_classes.id
and student_classes.status = 1