Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 1.6.0, 1.6.2
-
Fix Version/s: 1.10.0
-
Component/s: Zend_Db_Select
-
Labels:None
Description
Zend_Db_Select::union() function does not produce expected result.
$selectA = $db->select()
->from(array('u' => 'user'), 'name')
->where('u.id >= 5');
$selectB = $db->select()
->from(array('u' => 'user'), 'name')
->where('u.id < 5')
->union(array($selectA));
echo $selectB->__toString();
outputs
SELECT `u`.`name`SELECT `u`.`name` FROM `user` AS `u` WHERE (u.id >= 5) FROM `user` AS `u` WHERE (u.id < 5)
which is not a valid query.
Expected result:
(SELECT `u`.`name` FROM `user` AS `u` WHERE (u.id < 5)) UNION (SELECT `u`.`name` FROM `user` AS `u` WHERE (u.id >= 5))
I was able to get unions working by using this syntax:
$selectA = $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id >= 5'); $selectB = $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id < 5'); $select = $db->select() ->union(array($selectA, $selectB));or alternatively
$select = $db->select() ->union(array( $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id >= 5'), $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id < 5') ));It won't wrap each select clause in parenthesis though. See
ZF-4338for that issue.$selectA = $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id >= 5'); $selectB = $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id < 5'); $select = $db->select() ->union(array($selectA, $selectB));$select = $db->select() ->union(array( $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id >= 5'), $db->select() ->from(array('u' => 'user'), 'name') ->where('u.id < 5') ));ZF-4338for that issue.