2015-11-06 75 views
0

我有点卡在多个where查询。我想在我的Zend\Db\Sql\Select查询 '翻译' 查询波纹管:Zend Db Sql 选择多个地方(AND和OR之间的组合)

SELECT `users`.*, `users_metas`.* 
FROM `users` INNER JOIN `users_metas` ON `users`.`ID` = `users_metas`.`parent_id` 
WHERE `role` = 'admin' 
AND ( 
     `users`.`username` like '%q_word%' 
     OR 
     (`users_metas`.`meta_key` = 'name' 
       AND 
      `users_metas`.`meta_value` like '%q_word%') 
    ) 
ORDER BY `date_added` ASC 

我想是这样的:

$select = new Select(); 
$select->where(array('role' => 'admin')); 
$select->join('users_metas', 'users.ID = users_metas.parent_id'); 

,但我坚持到这个地方:

AND ( 
     `users`.`username` like '%q_word%' 
     OR 
     (`users_metas`.`meta_key` = 'name' 
       AND 
      `users_metas`.`meta_value` like '%q_word%') 
) 

谢谢!

+0

我解决使用'Expresion'查询,像这样的'$哪里= “users.username LIKE“%”。$搜索。“%”或\t(users_metas.meta_key = '名' AND users_metas.meta_value LIKE'%$ search%'))“; $ select-> where(new Expression($ where));'。但如果有其他方法可以做到这一点,我想尝试不同的方式。谢谢! – Andreea

回答

0
$where = new Where(); 
$where 
    ->equalTo('role', 'admin') 
    ->nest() 
    ->like('users.username', '%q_word%') 
    ->or 
    ->like('users_metas.meta_key', 'name') 
    ->or 
    ->like('users_metas.meta_value', '%q_word%') 
    ->unnest(); 


$select = new Select(); 
$select 
    ->from('users') 
    ->join('users_metas', 'users.ID = users_metas.parent_id') 
    ->where($where) 
    ->order('date_added');