在 yii2 中左连接 2 个表

时间:2021-05-24 03:26:16

标签: sql yii2

有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}
]

我能做什么?谢谢。

1 个答案:

答案 0 :(得分:1)

select * from 
classes, student_classes
where classes.id = student_classes.id
and student_classes.status = 1 
相关问题