2011-01-17 13 views
9

Jak bym skonstruować tej kwerendy przy użyciu Zend_Db_Select?:Jak mogę dołączyć podkwerenda użyciu 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

wygląda to można to zrobić tak: \t \t \t \t $ subscribers-> joinLeft (array ($ tableAlias> New Zend_Db_Expr ('(' $ hasło ').').), \t \t \t \t \t \t \t $ joinCondition array ($ fieldInfo [ 'Nazwa'] => 'wartość')); – Oleg

Odpowiedz

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

Ważne, aby zauważyć (wyrzucił mnie, gdy próbowałem to rozgryźć, dopóki nie znalazłem tej odpowiedzi): w pierwszym parametrze joinLeft(), upewnij się, że przekazałeś go jako obiekt Zend_Db_Expr, a nie jego wersję __toString() . –