Ver Mensaje Individual
  #8 (permalink)  
Antiguo 21/08/2011, 12:23
Avatar de kivpson
kivpson
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 9 meses
Puntos: 7
Respuesta: Left Join con Select Usando Zend DB

Tras busquedas e intentos e dado con la solución, claro esto gracias a las sugerencias de masterpuppet, eh aquí la solución:

El Query Orginal deseado:
Código:
SELECT 
	`g`.*, `t`.`total_tarjetas`, `u`.`username` AS `usuario` 
FROM 
	`tarjetas_grupos` AS `g` 
	LEFT JOIN (
		SELECT COUNT(*) AS `total_tarjetas`, `tarjetas_prepago`.`id_grupo` 
		FROM `tarjetas_prepago` 
		GROUP BY `id_grupo`
		) AS `t` ON t.id_grupo=g.id_grupo 
	LEFT JOIN `users` AS `u` ON u.id_user = g.creado_por 
ORDER BY `g`.`id_grupo` DESC
Y la implementación con Zend_Db:

Código PHP:
$tGrupos     = new TarjetasgruposTable();
$tTarjetas     = new TarjetasTable();
$tUsers     = new UsuariosTable();
 
 
$subSelect $tTarjetas->select()
         ->
from(
                 
$tTarjetas->_tablename,
                 array(
                     
'total_tarjetas'=>'COUNT(*)',
                     
'id_grupo')
                 )
         ->
group('id_grupo');
 
 
$select $tGrupos->select()
          ->
setIntegrityCheck(false)
          ->
from(
                  array(
'g'=>$tGrupos->_tablename),
                  array(
                      
'g.*')
                  )
          ->
joinleft(
                  array(
't'=>$subSelect),
                  
't.id_grupo=g.id_grupo',
                  array(
                      
'total_tarjetas'=>'t.total_tarjetas'
                  
)
                  )
          ->
joinleft(
                  array(
'u'=>$tUsers->_tablename),
                  
'u.id_user = g.creado_por',
                  array(
                      
'usuario'=>'u.username'
                  
)
                  )
         ->
order('g.'.$table->_id.' DESC'); 
Lo del _tablename es una variable que especifica el nombre de la tabla, la cual se define en el objeto Zend_Db_Table.

Gracias a todos los que contestarón.

Saludos!