Как использовать union в zend db

В sql я использую union, я не знаю, как записать его в zend db.

select m.*, 0 as is_shared from test m where user_id = $userId union select m.*,1 as is_shared from test m join test_shares ms where m.test_id = ms.test_id and ms.email_address = $email and m.url is not null; 

Пожалуйста, помогите мне ….

Я так пробовал, но не использовал

 $cols1 = array('test.*,0 as is_shared'); $select1 = $db->select () ->from ( 'test', $cols1 ) ->where ( 'user_id = ?', $userId); $cols2 = array('test_shares.*', '1 as is_shared'); $select2 = $db->select () ->from ( 'test', $cols2 ) ->join ( 'test_shares', array () ) ->where ( 'test.test_id = test_shares.test_id') ->where ( 'test_shares.email_address = ?', $email) ->where ( 'test.url is NOT NULL'); $select = $db->select() ->union(array($select1, $select2)) ->order('title'); 

Он принимает 'test'. '0' AS 'is_shared' как это, но мне нужно, чтобы это 0 как is_shared. Он принимает «тест». '1' AS 'is_shared', как это, но мне нужно как это 1 как is_shared.

Related of "Как использовать union в zend db"

Я не знаю, что наш sql – это работа. Но он может сделать следующий код.

 $userId = 10; $email = 'bbsdf@sdf.sd'; $select1 = $db->select() ->from(array('m' => 'test'), array('*', '0 AS is_shared')) ->where('user_id =?', $userId); $select2 = $db->select() ->from(array('m' => 'test'), array('*', '1 AS is_shared')) ->join(array('ms' => 'test_shares'), 'm.test_id = ms.test_id', '') ->where('ms.email_address =?', $email) ->where('m.url IS NULL'); $select = $this->select() ->union(array($select1, $select2)) ->order('title'); echo $select; die; /*SELECT `m`.*, `m`.`0` AS `is_shared` * FROM `test` AS `m` * WHERE (user_id =10) * UNION * SELECT `m`.*, `m`.`1` AS `is_shared` * FROM `test` AS `m` * INNER JOIN `test_shares` AS `ms` * ON m.test_id = ms.test_id * WHERE (ms.email_address ='bbsdf@sdf.sd') AND (m.url IS NULL) * ORDER BY `title` ASC*/ 

Согласно документации Zend_Db_Select , вы можете создать один запрос для каждого члена объединения (они могут быть строками или самими объектами Zend_Db_Select ), а затем вызвать метод union() для Zend_Db_Select .

Что-то вроде:

 $sql1 = FIRSTPARTOFTHEQUERY; $sql2 = SECONDPARTOFTHEQUERY; $select = $db->select(); $select->union(array($sql1, $sql2)); 

Надеюсь, это поможет,

Для дальнейшего использования в Zend Framework 2.3 это делается с помощью комбайна.

Например:

  use \Zend\Db\Sql\Select; use \Zend\Db\Sql\Sql; $sql = new Sql(/* ADAPTER HERE */); $tag1 = new Select( ['a' => 'articles'] ); $tag1->columns( [ 'tag' => 'first_tag'] ); $tag1->where->in('a.id', $articleIds); $tag2 = new Select( ['a' => 'articles'] ); $tag2->columns( [ 'tag' => 'second_tag'] ); $tag2->where->in('a.id', $articleIds); $tag2->combine($tag1); $tag3 = new Select( ['a' => 'articles'] ); $tag3->columns( [ 'tag' => 'third_tag'] ); $tag3->where->in('a.id', $articleIds); $tag3->combine($tag2); $statement = $sql->prepareStatementForSqlObject($tag3);