Zend framework2 zend framework 2中的子查询计数

Zend framework2 zend framework 2中的子查询计数,zend-framework2,Zend Framework2,我是Zf2的新手,所以请建议我应该如何在Zend framework 2中创建以下sql 选择mt1。*, 选择countmt2.parent\u id 从md_类型为mt2 其中mt2.parent_id=mt1.id作为cnt 从md_类型为mt1,您可以尝试以下操作: $sub = new Select('md_type'); $sub->columns(array(new Expression('COUNT(mt2.parent_id) as total'))) ->

我是Zf2的新手,所以请建议我应该如何在Zend framework 2中创建以下sql

选择mt1。*, 选择countmt2.parent\u id 从md_类型为mt2 其中mt2.parent_id=mt1.id作为cnt 从md_类型为mt1,您可以尝试以下操作:

$sub = new Select('md_type');
$sub->columns(array(new Expression('COUNT(mt2.parent_id) as total')))
    ->where(array(
        new \Zend\Db\Sql\Predicate\Expression('mt2.parent_id = mt1.id')
    ))
;

$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})");

$select = new \Zend\Db\Sql\Select('mt1');
$select->columns(array('*', 'cnt' => $subquery));
这将产生:

SELECT mt1.*, 
    (SELECT COUNT(mt2.parent_id) as total 
     FROM "md_type" 
     WHERE mt2.parent_id = mt1.id
    ) AS cnt 
FROM mt1
请试试这个

$sql = new Sql($this->_adapter);
$mainSelect = $sql->select()->from('mt1');
$subQry = $sql->select()
        ->from('md_type')
        ->columns(array('orderCount' => new \Zend\Db\Sql\Expression('COUNT(md_type.parent_id)')))
        ->where('mt2.parent_id = mt1.id');
$mainSelect->columns(
        array(
            'id', 
            'total' => new \Zend\Db\Sql\Expression('?', array($subQry)),
        )
);

$statement = $sql->prepareStatementForSqlObject($mainSelect);
$comments = $statement->execute();
$resultSet = new ResultSet();
$resultSet->initialize($comments);

return $resultSet->toArray();
参考: