HI everyone.
I’m puzzled. This query executes just fine with phpMyAdmin and the console, but not in Yii.
public function obtener_alumnos($colegio_id, $ciclo_escolar_id, $nivel_id, $grado_id, $grupo_id, $activo) {
switch($activo) {
case 9:
$filtro = '';
break;
case 0:
$filtro = " and a.activo = '0' ";
break;
default:
$filtro = " and a.activo = '1' ";
}
$q = "drop temporary table if exists alumno_articulo_tmp;
create temporary table alumno_articulo_tmp
select min(cap.articulo_id) as articulo_id, max(cap.articulo_id) as max_articulo_id,
cap.grado_id, cap.grupo_id, cap.alumno_id
from colegio_articulo_precio cap, colegio_nivel_ciclo cnc, colegio_grado_grupo cgg, alumno al,
articulo a, tipo_articulo ta
where cnc.colegio_id = $colegio_id
and cnc.ciclo_escolar_id = $ciclo_escolar_id
and cgg.grado_id = $grado_id
and cgg.grupo_id = $grupo_id
and cgg.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and al.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and al.colegio_grado_grupo_id = cgg.colegio_grado_grupo_id
and cap.colegio_nivel_ciclo_id = cgg.colegio_nivel_ciclo_id
and cap.grado_id = cgg.grado_id
and cap.grupo_id in (0, cgg.grupo_id)
and cap.alumno_id in (0, al.alumno_id)
and a.articulo_id = cap.articulo_id
and ta.tipo_articulo_id = a.tipo_articulo_id
and ta.parametro not in ('IPAD')
group by cap.grado_id, cap.grupo_id, cap.alumno_id;
create index ak_alumno on alumno_articulo_tmp(alumno_id, grupo_id, grado_id);
drop temporary table if exists alumno_tmp;
create temporary table alumno_tmp
select a.colegio_nivel_ciclo_id, a.colegio_grado_grupo_id, a.alumno_id, a.persona_id, a.hijo_profesor, a.activo,
cgg.grado_id, cgg.grupo_id,
0 as articulo_id, space(50) as articulo_clave, space(255) as articulo, space(50) as tipo_articulo_parametro
from colegio_nivel_ciclo cnc, colegio_grado_grupo cgg, grado g, alumno a
where cnc.colegio_id = $colegio_id
and cnc.ciclo_escolar_id = $ciclo_escolar_id
and g.grado_id = $grado_id
and cgg.grupo_id = $grupo_id
and cnc.nivel_id = g.nivel_id
and cgg.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and cgg.grado_id = g.grado_id
and a.colegio_nivel_ciclo_id = cgg.colegio_nivel_ciclo_id
and a.colegio_grado_grupo_id = cgg.colegio_grado_grupo_id
;
create index ak_alumno on alumno_tmp(alumno_id);
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = ar.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.alumno_id = a.alumno_id
and aa.alumno_id > 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = aa.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.grupo_id = a.grupo_id
and aa.grupo_id > 0
and aa.alumno_id = 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and a.articulo_id = 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = aa.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.grado_id = a.grado_id
and aa.grado_id > 0
and aa.grupo_id = 0
and aa.alumno_id = 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and a.articulo_id = 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
select a.colegio_grado_grupo_id, a.alumno_id, a.persona_id, p.persona, p.apellido_paterno, p.apellido_materno,
p.dia_nacimiento, p.mes_nacimiento, p.anio_nacimiento, p.sexo_o_moral, a.hijo_profesor, a.activo,
(select count(*) from documento d, documento_linea dl
where dl.documento_id = d.documento_id
and dl.alumno_id = a.alumno_id) as documentos,
(select count(*) from documento d, documento_linea dl
where dl.documento_id = d.documento_id
and dl.alumno_id = a.alumno_id
and d.aplicado = 1) as documentos_aplicados,
(select case when count(*) > 0 then 1 else 0 end from alumno ax
where ax.persona_id = a.persona_id
and ax.colegio_nivel_ciclo_id <> a.colegio_nivel_ciclo_id) as promovido,
a.articulo_id, a.articulo_clave, a.articulo, a.tipo_articulo_parametro
from alumno_tmp a, persona p
where p.persona_id = a.persona_id
order by p.apellido_paterno, p.apellido_materno, p.persona
";
$r = Yii::app()->db->createCommand($q)->queryAll();
if ($r !== FALSE) {
if (sizeof($r) > 0) {
foreach($r as $resultado) {
$data[] = $resultado;
if ($resultado['activo'] == 1) {
$total ++;
if ($resultado['hijo_profesor'] == 1) {
$hijos_profesores ++;
}
}
}
if ($total > 0) {
if ($hijos_profesores > 0) {
$porcentaje_hijos = round(($hijos_profesores / $total) * 100);
} else {
$porcentaje_hijos = 0;
}
}
}
} else {
}
return array('resultado'=>$data, 'porcentaje_hijos'=>$porcentaje_hijos);
}
Yii says:
CDbException
CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error. The SQL statement executed was: drop temporary table if exists alumno_articulo_tmp;
create temporary table alumno_articulo_tmp
select min(cap.articulo_id) as articulo_id, max(cap.articulo_id) as max_articulo_id,
cap.grado_id, cap.grupo_id, cap.alumno_id
from colegio_articulo_precio cap, colegio_nivel_ciclo cnc, colegio_grado_grupo cgg, alumno al,
articulo a, tipo_articulo ta
where cnc.colegio_id = 1599
and cnc.ciclo_escolar_id = 32
and cgg.grado_id = 85
and cgg.grupo_id = 298
and cgg.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and al.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and al.colegio_grado_grupo_id = cgg.colegio_grado_grupo_id
and cap.colegio_nivel_ciclo_id = cgg.colegio_nivel_ciclo_id
and cap.grado_id = cgg.grado_id
and cap.grupo_id in (0, cgg.grupo_id)
and cap.alumno_id in (0, al.alumno_id)
and a.articulo_id = cap.articulo_id
and ta.tipo_articulo_id = a.tipo_articulo_id
and ta.parametro not in ('IPAD')
group by cap.grado_id, cap.grupo_id, cap.alumno_id;
create index ak_alumno on alumno_articulo_tmp(alumno_id, grupo_id, grado_id);
drop temporary table if exists alumno_tmp;
create temporary table alumno_tmp
select a.colegio_nivel_ciclo_id, a.colegio_grado_grupo_id, a.alumno_id, a.persona_id, a.hijo_profesor, a.activo,
cgg.grado_id, cgg.grupo_id,
0 as articulo_id, space(50) as articulo_clave, space(255) as articulo, space(50) as tipo_articulo_parametro
from colegio_nivel_ciclo cnc, colegio_grado_grupo cgg, grado g, alumno a
where cnc.colegio_id = 1599
and cnc.ciclo_escolar_id = 32
and g.grado_id = 85
and cgg.grupo_id = 298
and cnc.nivel_id = g.nivel_id
and cgg.colegio_nivel_ciclo_id = cnc.colegio_nivel_ciclo_id
and cgg.grado_id = g.grado_id
and a.colegio_nivel_ciclo_id = cgg.colegio_nivel_ciclo_id
and a.colegio_grado_grupo_id = cgg.colegio_grado_grupo_id
;
create index ak_alumno on alumno_tmp(alumno_id);
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = ar.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.alumno_id = a.alumno_id
and aa.alumno_id > 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = aa.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.grupo_id = a.grupo_id
and aa.grupo_id > 0
and aa.alumno_id = 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and a.articulo_id = 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
update alumno_tmp a, alumno_articulo_tmp aa, articulo ar, tipo_articulo ta set
a.articulo_id = aa.articulo_id,
a.articulo_clave = ar.articulo_clave,
a.articulo = ar.articulo,
a.tipo_articulo_parametro = ta.parametro
where aa.grado_id = a.grado_id
and aa.grado_id > 0
and aa.grupo_id = 0
and aa.alumno_id = 0
and aa.articulo_id = aa.max_articulo_id
and ar.articulo_id = aa.articulo_id
and ar.articulo_id > 0
and a.articulo_id = 0
and ta.tipo_articulo_id = ar.tipo_articulo_id;
select a.colegio_grado_grupo_id, a.alumno_id, a.persona_id, p.persona, p.apellido_paterno, p.apellido_materno,
p.dia_nacimiento, p.mes_nacimiento, p.anio_nacimiento, p.sexo_o_moral, a.hijo_profesor, a.activo,
(select count(*) from documento d, documento_linea dl
where dl.documento_id = d.documento_id
and dl.alumno_id = a.alumno_id) as documentos,
(select count(*) from documento d, documento_linea dl
where dl.documento_id = d.documento_id
and dl.alumno_id = a.alumno_id
and d.aplicado = 1) as documentos_aplicados,
(select case when count(*) > 0 then 1 else 0 end from alumno ax
where ax.persona_id = a.persona_id
and ax.colegio_nivel_ciclo_id <> a.colegio_nivel_ciclo_id) as promovido,
a.articulo_id, a.articulo_clave, a.articulo, a.tipo_articulo_parametro
from alumno_tmp a, persona p
where p.persona_id = a.persona_id
order by p.apellido_paterno, p.apellido_materno, p.persona
Why? Any ideas?
Thanks