【问题标题】:Zend\Db\Sql\Select multiple where (combination between AND and OR)Zend\Db\Sql\Select 多个 where(AND 和 OR 的组合)
【发布时间】:2015-11-06 11:03:04
【问题描述】:

我有点卡在多个where 的查询上。我想在Zend\Db\Sql\Select 查询中“翻译”下面的查询:

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%')
)

谢谢!

【问题讨论】:

  • 我使用Expresion 解决查询,例如$where = "users.username LIKE '%".$search."%' OR (users_metas.meta_key = 'name' AND users_metas.meta_value LIKE '%$search%'))"; $select->where(new Expression($where));。但如果是其他方式,我想尝试不同的方式。谢谢!

标签: zend-framework zend-framework2 zend-db zend-db-table


【解决方案1】:
$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');

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2018-06-03
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多