У меня есть этот запрос:
select * from dias_clases as dc
inner join clases as cl on cl.clase_id = dc.clase
inner join asistencias as asis on asis.dia_clase = dc.dc_id
where(
clase in(select ce.clase from clases_estudiantes as ce where ce.estudiante = 321)
or dc_id in (select cr.dia_clase from clase_recuperada as cr where cr.estudiante = 321)
)
and fecha < '2017-04-26'
and cl.disciplina = 9
and dc.estado = 1
group by dc.dc_id
order by dc.fecha desc
Он отлично работает в консоли mysql. Мне нужен тот же запрос в Yii2 с активной записью, и я получил это:
$dias_clases = DiasClases::find()
->innerJoin("clases as cl", "cl.clase_id = clase")
->leftJoin("asistencias as asis", "asis.dia_clase = dc_id")
->where("
clase in(
select ce.clase from clases_estudiantes as ce where ce.estudiante = :estudiante
)
or dc_id in (
select cr.dia_clase from clase_recuperada as cr where cr.estudiante = :estudiante
)", [":estudiante" => $estudiante->estudiante_id]
)
->andWhere("fecha < :fecha", [":fecha" => $fecha])
->andWhere(["cl.disciplina" => $disciplina])
->andWhere(["estado" => DiasClases::TERMINADA])
->orderBy(["fecha" => SORT_DESC])
->all();
Но "где" не работает должным образом. Результаты, которые я получаю, неверны, и я думаю, что это потому, что эта часть:
where(
clase in(select ce.clase from clases_estudiantes as ce where ce.estudiante = 321)
or dc_id in (select cr.dia_clase from clase_recuperada as cr where cr.estudiante = 321)
)
не выполняется так же, как в консоли. Скобка нужна