2011-01-17 11 views
9

¿Cómo iba a construir esta consulta mediante Zend_Db_Select?:Cómo puedo participar en una subconsulta usando Zend_Db_Select

SELECT users.user_id, email_address, t1.value as 'languages'  
FROM users 
LEFT JOIN (
    SELECT 
    user_id 
    , field_id 
    , GROUP_CONCAT(value SEPARATOR ',') AS value 
    FROM user_multivalued 
    WHERE field_id=25 
    GROUP BY user_id, field_id) t1 
ON t1.user_id = users.users_id 
WHERE list_id = 45 
+0

Se ve que se puede hacer así: \t \t \t \t $ suscriptores,> joinLeft (array ($ tableAlias ​​=> nueva Zend_Db_Expr ('(' $ consulta ')'..)), \t \t \t \t \t \t \t $ joinCondition, array ($ fieldInfo [ 'nombre'] => 'valor')); – Oleg

Respuesta

30
$user_multivalued = $db 
    ->select() 
    ->from('user_multivalued', array(
     'user_id', 
     'field_id', 
     new Zend_Db_Expr("GROUP_CONCAT(value SEPARATOR ',') AS value") 
    )) 
    ->where('field = ?', 25) 
    ->group('user_id') 
    ->group('field_id') 
; 

$select = $db 
    ->select() 
    ->from('users', array('user_id', 'email_address')) 
    ->joinLeft(
     array('t1' => $user_multivalued), 
     't1.user_id = users.user_id', 
     array('languages'=>'value') 
    ) 
    ->where('list_id = ?', 45) 
; 
+1

Importante tener en cuenta (me echó mientras trataba de resolver esto hasta que encontré esta respuesta): en el primer parámetro joinLeft(), asegúrese de pasarlo como el objeto Zend_Db_Expr, no la versión __toString() de él . –

Cuestiones relacionadas