Consulta con Subconsulta

Cordial saludo

Actualmente tengo en Yii la siguiente consulta:


$sql = "SELECT tbl_participantes.participante, tbl_participantes.cedula, tbl_distribuidoras.distribuidora, 

                        (SELECT COUNT(tbl_impactos_tiendas.id_tienda) 

                        FROM tbl_impactos_tiendas 

                        WHERE tbl_participantes.id_participante=tbl_impactos_tiendas.id_participante AND tbl_impactos_tiendas.mes='$mes') AS tiendasImpactadas                    

                        FROM tbl_participantes 

                        INNER JOIN tbl_distribuidoras ON (tbl_participantes.id_distribuidora=tbl_distribuidoras.id_distribuidora) 

                    WHERE tbl_participantes.id_distribuidora='$idDistribuidora'";

$connection = Yii::app()->db;

$command = $connection->createCommand($sql);

$dataReader = $command->queryAll();

La cual funciona sin problema alguno y trae los datos que necsito, incluyendo los de la subconsulta, más cuando la escribo de la siguiente forma:


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

            ->select('participante, cedula, distribuidora, (SELECT COUNT(tbl_impactos_tiendas.id_tienda) 

                        FROM tbl_impactos_tiendas 

                        WHERE tbl_participantes.id_participante=tbl_impactos_tiendas.id_participante AND tbl_impactos_tiendas.mes='.$mes.') AS tiendasImpactadas')

            ->from('tbl_participantes')

            ->join('tbl_distribuidoras', 'tbl_participantes.id_distribuidora=tbl_distribuidoras.id_distribuidora')

            ->where('tbl_participantes.id_distribuidora=:id_distribuidora', array(':id_distribuidora'=>$idDistribuidora))

            ->queryAll();

Trae todos los datos, menos los de la subconsulta, pero tampoco imprime mensajes de error, por lo cual me gustaría saber cómo se deben de ejecutar las subconsultas en Yii, para que funcionen sin problema, usando la segunda estructura y no la primera (SQL puro).

Quedo atento a sus comentarios.

Muchas gracias.

hola luis. sin ir mas lejos a indagar en el porqué funciona ono, por qué en cambio no creas una vista en tu modelo de datos, que ya traiga el left join dentro de esta, asi procesas tu vista como un modelo de Yii.

por ejemplo:

tengo esta consulta:

select color.nombre, rango.nombre from colores left join rango on colores.tiporango = rango.tiporango;

en vez de complicar el negocio con la consulta que propones arriba, en cambio haria lo siguiente:

create view miscolores (nombre, rango) as

select color.nombre, rango.nombre from colores left join rango on colores.tiporango = rango.tiporango;

[b]

[/b]

la almacenaria en mi modelo de datos, luego, con Gii crearia un modelo de negocio basado en esta vista,

para acceder a ella de la forma tradicional en Yii.

ejemplo:

class MisColores extends CFormModel {

public $color;

public $nombre;

//blabla

public function rules(){ …blabla }

}

Si hay una razon para no hacer esto esta podria ser la parametrizacion de la vista, o razones de performance en caso de que esta vista maneja un rango muy alto de resultados que entorpezcan o sobre consuman el servidor de datos, pero sino no son estas las razones, creo que deberias hacerlo por razones de orden y respeto al MVC y al framework. es mi punto de vista, sin querer pasar por encima de tu decision de desarrollo.

a la orden cualquier cosa.