【问题标题】:How can I join a subquery using Zend_Db_Select如何使用 Zend_Db_Select 加入子查询
【发布时间】:2026-02-24 18:40:01
【问题描述】:

我将如何使用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

【问题讨论】:

  • 看起来可以这样做: $subscribers->joinLeft(array($tableAlias => new Zend_Db_Expr('(' . $query . ')' )), $joinCondition, array( $fieldInfo['name'] => '值'));

标签: zend-framework zend-db-select


【解决方案1】:
$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)
;

【讨论】:

  • 需要注意的重要事项(当我试图弄清楚这一点时把我赶走,直到我找到这个答案):在第一个 joinLeft() 参数中,确保将它作为 Zend_Db_Expr 对象传递,而不是__toString() 版本。