2011-01-17 4 views
9

Wie würde ich diese Abfrage konstruieren mit Zend_Db_Select?:Wie kann ich beitreten eine Unterabfrage mit 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

Es sieht es aus wie das getan werden kann: \t \t \t \t $ subscribers-> joinLeft (array ($ tableAlias ​​=> new Zend_Db_Expr ('(' $ query ')'..)), \t \t \t \t \t \t \t $ joinCondition, array ($ fieldinfo [ 'name'] => 'value')); – Oleg

Antwort

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

Wichtig zu beachten (warf mich ab, während ich versuchte herauszufinden, bis ich diese Antwort gefunden habe): im ersten joinLeft() Parameter, stellen Sie sicher, dass Sie es als das Zend_Db_Expr Objekt übergeben, nicht die __toString() Version davon . –

Verwandte Themen