【问题标题】:ZEND 2. Union . Add Limit to UNION queryZEND 2. 联合。向 UNION 查询添加限制
【发布时间】:2014-08-01 13:38:14
【问题描述】:

我有一个如下所示的 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 中实现这一点?

【问题讨论】:

    标签: zend-framework2


    【解决方案1】:

    解决方案 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;
    

    【讨论】:

    • 我需要通过方法限制添加到 dynimicli :) 到这个 sql。
    • 我不明白你的意思
    • 我需要添加限制 :) 像这样。我构建查询,然后我写 ->limit(10) 并且 zend 必须知道我想限制所有查询与 ofsset 的 order 相同.我需要新的 Select();并添加到类限制和顺序中的变量:) 我需要处理选择对象:D 我认为我写得足够了:)
    • 如果您费心看答案并想一想,我相信您可以添加偏移量
    • 所以我不能在选择对象中构建查询并使用他的方法来添加限制?
    【解决方案2】:

    添加这些行会起作用,

    $select1 = 新选择(); $select1->combine($selectPdContest, 'union all');

    $select3 = 新选择(); $oneTwo = $select3->from(['sub' => $select1])->limit(10);

    【讨论】:

    • 这行得通,但我自己想这个:D感谢大家的好答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2019-05-25
    • 1970-01-01
    • 2020-12-02
    • 2017-02-15
    相关资源
    最近更新 更多