在Codeigniter中组合mysql和OR查询

gop*_*410 30 php mysql codeigniter codeigniter-2

我想在CI中组合AND OR mysql查询.我已经看过这个帖子:http://codeigniter.com/forums/viewthread/92818/.但他们没有在那里提供确切的解决方案.

如何使用严格的CI框架创建以下查询?(我可以在没有括号的情况下轻松创建查询,但它不是同一个查询.)

SELECT * FROM `Persons` WHERE
LastName='Svendson' AND Age="12" AND
(FirstName='Tove' OR FirstName='Ola' OR Gender="M" OR Country="India") 
Run Code Online (Sandbox Code Playgroud)

PS:这只是一个示例查询,即使它没有意义也不建议在单个内部编写查询的整个OR部分where().

编辑:基本上我想要执行以下简单查询:

SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3') 
Run Code Online (Sandbox Code Playgroud)

gad*_*lat 42

在CodeIgniter 3中有新方法group_start()和group_end(),它们完全用于此目的.

return $this->db
     ->where('LastName', 'Svendson');
     ->where('Age', 12);
     ->group_start()
         ->where('FirstName','Tove')
         ->or_where('FirstName','Ola')
         ->or_where('Gender','M')
         ->or_where('Country','India')
     ->group_end()
     ->get('Persons')
     ->result();
Run Code Online (Sandbox Code Playgroud)


cso*_*elo 41

这会有用吗?

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName='Tove' OR FirstName='Ola' OR Gender='M' OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();
Run Code Online (Sandbox Code Playgroud)

  • 我在初始答案中问你是否有一些理由用活动记录来完成这个,因为在()IS'严格的codeigniter'中定义一个查询,它只是不是活动记录.无论如何,这在CI中是不可能的,因为它们不允许您在AR中执行嵌套查询.有一个名为IgnitedQuery的查询字符串构建器:http://www.assembla.com/wiki/show/IgnitedRecord/IgnitedQuery. (3认同)
  • 是的,这将工作,这是我目前使用的.但这不是严格的CI方式,我必须手动转义字符串.我也怀疑这样的答案,所以在问题中提到过:"不建议将查询的整个OR部分写在一个where()中." (2认同)