zend framework php zend-framework zend-db

php - framework - Cómo usar la unión en zend db



zend framework db limit (3)

En sql estoy usando la unión, no sé cómo escribirla en 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;

Por favor, ayúdame....

Intenté así, pero no uso

$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'');

Está tomando ''prueba''. ''0'' AS ''is_shared'' así pero necesito este 0 como is_shared. Está tomando ''prueba''. ''1'' AS ''is_shared'' así pero necesito este 1 como is_shared.


De acuerdo con la documentación de Zend_Db_Select , puede crear una consulta para cada miembro de la unión (pueden ser cadenas o objetos Zend_Db_Select ) y luego llamar al método union() de Zend_Db_Select .

Algo como:

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

Espero que ayude,


No sé que nuestro sql es trabajo. Pero puede hacer el siguiente código.

$userId = 10; $email = ''[email protected]''; $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 =''[email protected]'') AND (m.url IS NULL) * ORDER BY `title` ASC*/


Para referencia futura, en Zend Framework 2.3 esto se hace con combinar.

Por ejemplo:

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);