在笨结合MySQL和或查询(combining mysql AND OR queries in Co

2019-06-25 12:20发布

我想和或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