2

Webアプリケーションをzf1からzf2に移動していますが、SQLクエリで発生する問題の中で、結合を作成する方法がわかりません。

以前は作れるようになりました

$select->union($select1, $select2, $select3) 

しかし、Zend \ Db \ Sql\Selectにはunion()もうメソッドがありません。

zf2を使用したクエリで結合を作成する方法はまだありますか?

4

3 に答える 3

4

1 つ以上の UNION を簡単に使用したい場合の代替手段として、ZF2 には専用のクラスZend\Db\Sql\Combineがあります。

new Combine(
    [
        $select1,
        $select2,
        $select3,
        ...
    ]
)

また (new Combine)->union($select);

于 2016-02-19T22:53:45.313 に答える
0

以下は、UNION によって結合された 4 つの SELECT の「重い回避策」の例です。

$sm = $this->getServiceLocator();
$adapter = $sm->get('Zend\Db\Adapter\Adapter');

$columns = array(
    'date', 'business_unit', 'project', 'cost_center',
    'some_value1' => new Expression('SUM(IF(recruitment = \'internal\',1,0))'),
    'some_value2' => new Expression('SUM(IF(recruitment = \'external\',1,0))'),
    'some_value3' => new Expression('SUM(total_employees)'),
    'some_value4' => new Expression('SUM(IF(recruitment = \'internal\',total_time,0))'),
    'some_value5' => new Expression('SUM(IF(recruitment = \'external\',total_time,0))'),
    'some_value6' => new Expression('SUM(total_time)')
);

$sql = new Sql($adapter);

$abstractSelect = $sql->select();
$abstractSelect->from('summary')
    ->columns($columns)
    ->where->equalTo('date', '2013-01-25')
    ->where->equalTo('business_unit', 'foo')
    ->where->equalTo('project', 'bar');

$select1 = clone($abstractSelect);

$select2 = clone($abstractSelect);
$select2->where->equalTo('attendant', '1');

$select3 = clone($abstractSelect);
$select3->where->equalTo('attendant', '0')
    ->where->equalTo('recruitment', 'internal');

$select4 = clone($abstractSelect);
$select4->where->equalTo('attendant', '0')
    ->where->equalTo('disbursal', '0');

$selects = array(
    $select1->getSqlString(),
    $select2->getSqlString(),
    $select3->getSqlString(),
    $select4->getSqlString()
);      

$union = implode(" UNION ", $selects);

$statement = $adapter->createStatement(str_replace('"', '`', $union));
$results = $statement->execute();

これは何の価値もありませんが、誰かがこれを改善できるかもしれません。

最後の 2 行が重要です。任意の UNION クエリを解析できます。

于 2013-02-06T07:58:26.687 に答える