2011-01-17 8 views
9

Come faccio a costruire questo query utilizzando Zend_Db_Select?:Come posso partecipare a una sottoquery utilizzando 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

Sembra si può fare in questo modo: \t \t \t \t $ subscribers-> joinLeft (array ($ tableAlias ​​=> new Zend_Db_Expr ('(' $ query ')'..)), \t \t \t \t \t \t \t $ joinCondition, array ($ fieldInfo [ 'name'] => 'valore')); – Oleg

risposta

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 da notare (mi ha buttato giù mentre cercavo di capirlo fino a quando ho trovato questa risposta): nel primo parametro joinLeft(), assicurati di passarlo come l'oggetto Zend_Db_Expr, non la versione __toString() di esso . –

Problemi correlati