2012-10-28 15 views

उत्तर

7

कृपया इसे आज़माएं।

$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(); 

लिंक: ZF2 - subqueries

0
किसी भी अधिक जानकारी के बिना

आप की कोशिश कर सकते:

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

आप उपयोग बयानों के साथ शीर्ष पर जोड़ने की आवश्यकता होगी:

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

आप इस कोशिश कर सकते हैं:

// 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)); 

आउटपुट कुछ ऐसा होगा:

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

मुझे कच्चे प्रश्नों का उपयोग किए बिना इस प्रकार के प्रश्नों को निष्पादित करने के लिए क्वेरी बिल्डर का उपयोग करने का एक अच्छा तरीका नहीं पता है।

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 फ्रेमवर्क 2 का उपयोग का प्रतिनिधित्व करते हैं कर सकते हैं के रूप में:

$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); 

मान लिया जाये कि $ डीबीएच आपका डेटाबेस एडेप्टर है।

संबंधित मुद्दे