ZEND 2.联盟。添加限制到UNION查询

时间:2014-08-01 13:38:15

标签: zend-framework2

我有一个类似下面的SQL查询,我想在Zend Framework 2中创建它。

  

(SELECT id AS id FROM exp_personal_data ORDER BY town)UNION(SELECT id AS id FROM pd_unregister)

我想加入工会并加入此LIMIT,ORDER BY等。

$ this-> _select-> combine($ selectPdContest,'union all');

当我写这样的查询时。

  

$ this-> _select-> combine($ selectPdContest,'union all') - > limit('10);

查询如下所示:

  
    

(SELECT id AS id FROM exp_personal_data ORDER BY town LIMIT 10)UNION(SELECT id AS id FROM pd_unregister)

  

限制仅添加到第一个选择。我想要像这样添加限制。

  

(SELECT id AS id FROM exp_personal_data ORDER BY town)UNION(SELECT id AS id FROM pd_unregister)LIMIT 10

如何在Zend框架2中创建它?

2 个答案:

答案 0 :(得分:3)

解决方案1(简单):

    $adapter = $this->tableGateway->getAdapter();
    $resultSet = $adapter->query("(SELECT user_id AS id FROM user ORDER BY id)  UNION  (SELECT account_id AS id FROM account) LIMIT 10",$adapter::QUERY_MODE_EXECUTE);
    print_r($resultSet->toArray());die;

解决方案2(复杂):

use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Select;

//sql query first part
$adapter = $this->tableGateway->getAdapter();//the db connection adapter
$select = new Select('user');
$select->columns(array('id' => 'user_id'));
$select->order('id');
$sql = new Sql($adapter);
$statement = $sql->getSqlStringForSqlObject($select);

//sql query second part         
$select2 = new Select('account');
$select2->columns(array('id' => 'account_id'));
$sql = new Sql($adapter);
$statement2 = $sql->getSqlStringForSqlObject($select2);

//combine the two statements into one        
$unionQuery = sprintf('%s UNION %s','('.$statement = $sql->getSqlStringForSqlObject($select).')',
'('.$statement2 = $sql->getSqlStringForSqlObject($select2).') LIMIT 10'); 

//execute the union query 
$resultSet = $adapter->query( $unionQuery, $adapter::QUERY_MODE_EXECUTE);

print_r($resultSet->toArray());die;

答案 1 :(得分:0)

添加这些行将起作用,

$ select1 = new Select(); $ select1-> combine($ selectPdContest,'union all');

$ select3 = new Select(); $ oneTwo = $ select3-> from(['sub'=> $ select1]) - > limit(10);