2012-10-28 6 views
5

böyle çalıştı:Zend Framework 2: sql alt sorgu ZF1 yılında

$selectColumns = array(
    '*', 
    'orders_total' => "(".$db->select()->from("orders", array("COUNT(*)"))->where("orders.parent_id=mytable.id").")", 
); 
$select = $db->select()->from('mytable', $selectColumns); 

Nasıl ZF2 bunu yapmak? Teşekkürler. Herhangi daha fazla bilgi olmadan

cevap

7

Lütfen bunu deneyin.

$sql = new Sql($this->_adapter); 
$mainSelect = $sql->select()->from('mytable'); 
$subQry = $sql->select() 
     ->from('orders') 
     ->columns(array('orderCount' => new \Zend\Db\Sql\Expression('COUNT(orders.id)'))); 
$mainSelect->columns(
     array(
      'id', 
      'orders_total' => new \Zend\Db\Sql\Expression('?', array($subQry)), 
     ) 
); 

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

return $resultSet->toArray(); 

Bağlantı: Sen böyle bir şey için SQL yeniden deneyebilirsiniz ZF2 - subqueries

0

deneyebilirsin:

$selectColumns = array(
    '*', 
    'orders_total' => "(".$db->select()->from("orders", array("COUNT(*)"))->where("orders.parent_id", "mytable.id").")", 
); 
$select = $db->select()->from('mytable', $selectColumns); 
Sen kullanım ifadelere üstündeki eklemeniz gerekecektir

:

use Zend\Db\Sql\Select; 
use Zend\Db\Sql\Where; 
1

Bu deneyebilirsiniz:

// Make your query here using the builder if you wish, 
// but we will need to convert to string for the Expression 
$sub = new Select('orders'); 
$sub->columns(array(new Expression('COUNT(*) as total'))) 
    ->where(array('id' => 4)) 
; 
// You could just create an expression.. 
$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})"); 

$select = new \Zend\Db\Sql\select('tablename'); // this is inside a 

$select->columns(array('*', 'orders_total' => $subquery)); 

çıktı şu şekilde olacaktır:

SELECT 
    .*, 
    (SELECT COUNT(*) as total FROM "orders" WHERE "id" = '4') AS orders_total 
FROM tablename 

Ham sorgular kullanmak zorunda kalmadan, bu tür sorguları gerçekleştirmek için sorgu oluşturucuyu kullanmanın güzel bir yolunu bulamadım.

0

:

SELECT 
    *, 
    SUM(IF(O.parent_id IS NULL, 0, 1)) AS orders_total 
FROM mytable 
    LEFT JOIN orders O ON mytable.id = O.parent_id 

Zend Framework 2'yi kullanarak temsil edebilir Hangi gibidir:

$select = new Select('mytable'); 
$select->columns(array(
    '*', 
    'orders_total' => new Expression("SUM(IF(O.parent_id IS NULL, 0, 1))") 
)); 
$select->join(array('O', 'orders'), 
       "mytable.id = O.parent_id", 
       Select::JOIN_LEFT); 
$select->group(array('mytable.id')); 

$result = $dbh->selectWith($select); 

varsayarsak $ dbh, veritabanı bağdaştırıcınızdır.