在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');
正在考试'。' 0' AS' is_shared'像这样但我需要这个0作为is_shared。 它正在进行测试'。' 1' AS' is_shared'像这样但我需要像is_shared这样的1。
答案 0 :(得分:8)
我不知道我们的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*/
答案 1 :(得分:2)
为了将来参考,在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);
答案 2 :(得分:1)
根据Zend_Db_Select documentation,您可以为联合的每个成员创建一个查询(它们可以是字符串或Zend_Db_Select
个对象本身),然后调用union()
方法{ {1}}。
类似的东西:
Zend_Db_Select
希望有所帮助,