我想和或MySQL查询在CI结合起来。 我已经看到了这一主题: 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")
PS:这只是一个简单的查询,即使它是没有意义及不建议编写查询的全部或部分内一个单一的where()
编辑:基本上,我想下面的简单查询的实现:
SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3')
Answer 1:
这是否行得通呢?
$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();
Answer 2:
在笨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();
Answer 3:
你可以简单地使用
$this->db->where("status","live")->or_where("status","dead");
你也可以使用
$this->db->where("(status='live' OR status='dead')");
Answer 4:
使用笨3.0帧工作,存在可用于单独或其中,并且其中operation.that是,通过组和组端新功能
这样的代码,
$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();
Answer 5:
尝试使用Query grouping
链接吧
http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
Answer 6:
在笨,我们可以使用这样更容易理解。
$sql = "SELECT
*
FROM
`Persons`
WHERE
LastName = 'Svendson'
AND Age = '12'
AND (
FirstName = 'Tove'
OR FirstName = 'Ola'
OR Gender = 'M'
OR Country = 'India'
)";
$query = $this->db->query($sql);
return $query->result();
Answer 7:
目前与CI2您无法访问查询生成器方法 - 无需扩展数据库类和私有改变方法的访问类型的公共数据库类($这个 - >数据库> _ compile_select())/保护,杀死的能力建立子查询的喜欢你试图使用ActiveRecord类来构建。 唯一的方法,使像一个你试图建立将只使用该数据库查询方法的子查询
$table = $this->db->dbprefix('tablename');
$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));
与会者一致认为,在这样一个博客帖子CI Subquerys但它是过时的,只适用于CI 1.7希望有点帮助。
Answer 8:
本身没有任何意义的查询,你选择:
- 司徒Svendson,12岁
- 奥拉斯文森,12岁
- 丙氨酰画名为Svendson,12岁
- 来自印度丙氨酰人命名Svendson,12岁
托弗似乎是一个人的名字,所以选择性别是不必要的。 奥拉似乎是一个女孩的名字,所以选择性别不仅是不必要的,但它只是没有任何意义。 您的查询将返回名为Svendson任何12岁的男性,任何十一年印度老史云逊命名,并托芙和奥拉Svendson,如果他们是12岁。
你为什么不想要把它()括号? 你想用某种原因活动记录来完成呢?
文章来源: combining mysql AND OR queries in Codeigniter