2011-01-17 29 views
9

Làm thế nào tôi sẽ xây dựng truy vấn này sử dụng Zend_Db_Select?:Làm thế nào tôi có thể tham gia một subquery sử dụng 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

Có vẻ nó có thể được thực hiện như thế này: \t \t \t \t $ subscribers-> joinLeft (mảng ($ tableAlias ​​=> mới Zend_Db_Expr ('(' $ query ')'..)), \t \t \t \t \t \t \t $ joinCondition, array ($ fieldInfo [ 'name'] => 'giá trị')); – Oleg

Trả lời

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

Quan trọng cần lưu ý (đã ném tôi ra trong khi tôi đang cố gắng tìm ra câu trả lời này): trong tham số joinLeft() đầu tiên, đảm bảo bạn chuyển nó thành đối tượng Zend_Db_Expr chứ không phải phiên bản __toString() của nó . –

Các vấn đề liên quan