Php 循环中的Codeigniter嵌套查询

Php 循环中的Codeigniter嵌套查询,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在codeigniter中开发了一个站点,我想在其中创建一个查询,其中包含一些条件和一个条件,或者类似以下内容: Select * from users where username = 'user' and nation_id = 90 and active = 1 and (rate = 1 OR rate = 2 OR rate = 3); 现在我已经创建了这段代码,但不起作用,因为这与编写以下代码类似: Select * from users where username = 'us

我在codeigniter中开发了一个站点,我想在其中创建一个查询,其中包含一些条件和一个条件,或者类似以下内容:

Select * from users where username = 'user' and nation_id = 90 and active = 1 and (rate = 1 OR rate = 2 OR rate = 3);
现在我已经创建了这段代码,但不起作用,因为这与编写以下代码类似:

Select * from users where username = 'user' and nation_id = 90 and active = 1 and rate = 1 OR rate = 2 OR rate = 3;
我不想要这个问题,而是第一个问题。这是我的代码:

$this->db->from('users');
$this->db->where('username', 'user');
$this->db->where('nation_id', 90);
$this->db->where('active', 1);

for ($i = 1; $i<=3; $i++){
     $this->db->or_where('rate', $i);
}

$query = $this->db->get();
$this->db->from('users');
$this->db->where('username','user');
$this->db->where('nation_id',90);
$this->db->where('active',1);
对于($i=1;$idb->or_其中('rate',$i));
}
$query=$this->db->get();
请不要告诉我其他方式,比如手动编写查询,因为我已经简化了它,并且手动查询非常困难。
循环很重要,因为我必须循环数组。

我只想在
()
中插入我的or条件是否可行?

您可以使用
$this->db->where_in()
,例如:

$opts = array();
for ($i = 1; $i <=3; $i++) {
    $opts[] = $i;
}
$this->db->where_in('rate', $opts);
$opts=array();
对于($i=1;$i db->where_in('rate',$opts));

您可以使用
$this->db->where_in()
,例如:

$opts = array();
for ($i = 1; $i <=3; $i++) {
    $opts[] = $i;
}
$this->db->where_in('rate', $opts);
$opts=array();
对于($i=1;$i db->where_in('rate',$opts));

您可以使用
where_in
方法:

$this->db->from('users');
$this->db->where('username', 'user');
$this->db->where('nation_id', 90);
$this->db->where('active', 1);
$this->db->where_in('rate' array(1, 2, 3))
$query = $this->db->get();
或者,您可以使用
和_where
方法执行相同的操作,并显式设置括号:

$this->db->from('users');
$this->db->where('username', 'user');
$this->db->where('nation_id', 90);
$this->db->where('active', 1);
// This produces: AND (rate = 1 OR rate = 2 OR rate = 3)
$this->db->where('(rate = 1 OR rate = 2 OR rate = 3)')
$query = $this->db->get();

您可以使用
where_in
方法执行此操作:

$this->db->from('users');
$this->db->where('username', 'user');
$this->db->where('nation_id', 90);
$this->db->where('active', 1);
$this->db->where_in('rate' array(1, 2, 3))
$query = $this->db->get();
或者,您可以使用
和_where
方法执行相同的操作,并显式设置括号:

$this->db->from('users');
$this->db->where('username', 'user');
$this->db->where('nation_id', 90);
$this->db->where('active', 1);
// This produces: AND (rate = 1 OR rate = 2 OR rate = 3)
$this->db->where('(rate = 1 OR rate = 2 OR rate = 3)')
$query = $this->db->get();

使用
BETWEEN
操作符,不必有循环:

$this->db->where("rate BETWEEN 1 AND 3");

这种方法更简洁,因为如果将其设置在1和150之间,您将不会有一个庞大的sql查询:
在(1,2,3,4,5,…,149,150)中进行排序
,但只需
在1和150之间进行排序
。这似乎更合适。

使用
介于
操作符,您不必有一个循环:

$this->db->where("rate BETWEEN 1 AND 3");


这个方法更干净,因为如果你把它设置在1到150之间,你就不会有一个庞大的sql查询:
在(1,2,3,4,5,…,149,150)中进行评级
,但是只需
在1到150之间进行评级
。这似乎更合适。

你从$This->db->last\u query()中得到了什么?而且,您确实注意到您正在从
服务
中选择*而不是从
用户
,对吗?复制错误,因为我有许多类似的查询。@jcorryLooks喜欢您可以在
之间使用
,您从$this->db->last\u query()中得到什么?而且,您确实注意到您正在从
服务
中选择*而不是从
用户
,对吗?复制错误,因为我有许多类似的查询。@jcorryLooks像您一样可以在
之间使用
不,我必须为or条件使用一个循环,其中条件意外地使用了
方法,而不是
方法抱歉,但我必须使用循环..但你的函数可以在其他情况下工作+1只是好奇:为什么有这么多的Upvots与偶数循环要求没有满足?@Cthulhu也许是因为Upvorts没有期望编写一个简单的循环来标记答案是有效的,这是显而易见的,至少对于
5k
用户来说是如此。不,我必须为or\u使用循环,其中con我无意中使用了
或_where
方法,而不是
和_where
。抱歉,我必须使用cycle。但是你的函数可以在其他情况下工作+1只是好奇:为什么没有满足偶数循环要求的情况下进行如此多的Upvots?@Cthulhu可能是因为upvoters没有期望编写一个简单的循环来将答案标记为有效,这很明显,至少对于
5k
用户来说是这样。谢谢这是我想要的谢谢这是我想要的不我需要使用循环的条件我真的不明白为什么在这里,除非你在循环中做一些测试,会给出一个类似
rate in(1,3,7,9)的查询
不,我需要与循环一起使用的条件我真的不明白为什么在这里,除非您在循环中进行一些测试,这样会给出一个查询,如
rate in(1,3,7,9)