Cdbcommand Falló Al Ejecutar La Sentencia Sql: Sqlstate[Hy000]: General Error

Buen día mundo!

Estoy tratando de hacer un reporte y decidí cargar con toda la lógica al servidor MYSQL(InnoDB)

para que con YII solamente me encargue de renderizar el resultado de la consulta.

Pero me aparece este error!!

CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error

Consulta SQL




SET @total_casos = (SELECT COUNT(*) FROM casos);

SET @total_casos_cerrados = (SELECT COUNT(*) FROM casos WHERE idEstatus IN(2,3));

SET @total_casos_cerrados_tiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 2);

SET @total_casos_cerrados_destiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 3);


SELECT i.nombre as 'Ingeniero', 

		@total_casos_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero) AS 'Casos Asignados',

		((@total_casos_x_ing * 100) / @total_casos) as '%',

		@total_casos_cerrados_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus IN(2,3)) AS 'No. de Casos Cerrados',

		((@total_casos_cerrados_x_ing * 100) / @total_casos_x_ing) as '%',

		@total_casos_cerrados_tiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 2) AS 'No. de Casos Cerrados a Tiempo',

		((@total_casos_cerrados_tiempo_x_ing * 100) / @total_casos_cerrados_x_ing) as '%',

		@total_casos_cerrados_destiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 3) AS 'No. de Casos Cerrados Fuera de Tiempo',

		((@total_casos_cerrados_destiempo_x_ing * 100) / @total_casos_cerrados_x_ing) as '%'

FROM ingenieros i


UNION


SELECT 'SUMA', 

		  @total_casos,

		  '100%',

		  @total_casos_cerrados,

		  ((@total_casos_cerrados * 100) / @total_casos),

		  @total_casos_cerrados_tiempo,

		  ((@total_casos_cerrados_tiempo * 100) / @total_casos),

		  @total_casos_cerrados_destiempo,

		  ((@total_casos_cerrados_destiempo * 100) / @total_casos)

ORDER BY @total_casos_cerrado_tiempo DESC




Codigo YII




$query = "

                SET @total_casos = (SELECT COUNT(*) FROM casos);

                SET @total_casos_cerrados = (SELECT COUNT(*) FROM casos WHERE idEstatus IN(2,3));

                SET @total_casos_cerrados_tiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 2);

                SET @total_casos_cerrados_destiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 3);

                SELECT i.nombre as 'Ingeniero', 

                       @total_casos_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero) AS 'Casos Asignados',

                       ((@total_casos_x_ing * 100) / @total_casos) as '%',

                       @total_casos_cerrados_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus IN(2,3)) AS 'No. de Casos Cerrados',

                       ((@total_casos_cerrados_x_ing * 100) / @total_casos_x_ing) as '%',

                       @total_casos_cerrados_tiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 2) AS 'No. de Casos Cerrados a Tiempo',

                       ((@total_casos_cerrados_tiempo_x_ing * 100) / @total_casos_cerrados_x_ing) as '%',

                       @total_casos_cerrados_destiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 3) AS 'No. de Casos Cerrados Fuera de Tiempo',

                       ((@total_casos_cerrados_destiempo_x_ing * 100) / @total_casos_cerrados_x_ing) as '%'

                FROM ingenieros i

                UNION

                SELECT 'SUMA', 

                       @total_casos,

                       '100%',

                       @total_casos_cerrados,

                       ((@total_casos_cerrados * 100) / @total_casos),

                       @total_casos_cerrados_tiempo,

                       ((@total_casos_cerrados_tiempo * 100) / @total_casos),

                       @total_casos_cerrados_destiempo,

                       ((@total_casos_cerrados_destiempo * 100) / @total_casos)

                ORDER BY @total_casos_cerrado_tiempo DESC";

            

            $dataReader = Yii::app()->db->createCommand($query)->queryAll();




Muchas gracias por su atenta ayuda, sin ustedes no hubiese podido resolverlo ¬¬

La solución estaba en ejecutar la asignación de variables de usuario aparte





$query = "

                SET @fecha_inicio = '$fechaIni';

                SET @fecha_final = '$fechaFin';

                

                SET @total_casos = (SELECT COUNT(*) FROM casos WHERE DATE(fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final);

                SET @total_casos_cerrados = (SELECT COUNT(*) FROM casos WHERE idEstatus IN(2,3) AND DATE(fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final);

                SET @total_casos_cerrados_tiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 2 AND DATE(fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final);

                SET @total_casos_cerrados_destiempo = (SELECT COUNT(*) FROM casos WHERE idEstatus = 3 AND DATE(fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final);

                ";

            

            Yii::app()->db->createCommand($query)->execute();

            

            $query = "

                SELECT i.nombre as 'Ingeniero', 

                    @total_casos_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND DATE(c.fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final) AS 'CasosAsignados',

                    IFNULL(ROUND(((@total_casos_x_ing * 100) / @total_casos),2), 'NA') as 'pca',

                    @total_casos_cerrados_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus IN(2,3) AND DATE(c.fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final) AS 'NoCasosCerrados',

                    IFNULL(ROUND(((@total_casos_cerrados_x_ing * 100) / @total_casos_x_ing),2), 'NA') as 'pcc',

                    @total_casos_cerrados_tiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 2 AND DATE(c.fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final) AS 'NoCasosCerradosTiempo',

                    IFNULL(ROUND(((@total_casos_cerrados_tiempo_x_ing * 100) / @total_casos_cerrados_x_ing),2), 'NA') as 'pcct',

                    @total_casos_cerrados_destiempo_x_ing := (SELECT COUNT(*) FROM casos c WHERE c.idIngeniero = i.idIngeniero AND c.idEstatus = 3 AND DATE(c.fechaRecepcion) BETWEEN @fecha_inicio AND @fecha_final) AS 'NoCasosCerradosDestiempo',

                    IFNULL(ROUND(((@total_casos_cerrados_destiempo_x_ing * 100) / @total_casos_cerrados_x_ing),2), 'NA') as 'pccd'

                FROM ingenieros i

                UNION

                SELECT 'SUMA', 

                    @total_casos,

                    '100%',

                    @total_casos_cerrados,

                    IFNULL(ROUND(((@total_casos_cerrados * 100) / @total_casos),2), 'NA'),

                    @total_casos_cerrados_tiempo,

                    IFNULL(ROUND(((@total_casos_cerrados_tiempo * 100) / @total_casos), 2), 'NA'),

                    @total_casos_cerrados_destiempo,

                    IFNULL(ROUND(((@total_casos_cerrados_destiempo * 100) / @total_casos), 2), 'NA')

                ORDER BY @total_casos_cerrado_tiempo DESC";

            

            $dataReader = Yii::app()->db->createCommand($query)->queryAll();



Supongo que será una ironía, q por otra parte es injusta.

El código de error q pusiste no es todo el código de error que te mostró php. De verdad crees q con esto :




CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error



Q es lo q tú mismo pusiste, alguien te puede ayudar?

Por mi parte acabo de ver tu post.

Un saludo.