我有一个类似下面的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中创建它?
答案 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);