Codeigniter在循环中嵌套查询

时间:2013-08-07 15:40:05

标签: php mysql codeigniter

我有一个在codeigniter中开发的网站,我想创建一个带有条件和条件的查询,其中包含OR,如下所示:

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();

请不要告诉我其他方式,比如手动编写查询,因为我已将其简化,并且是进行手动查询的最大值。
循环很重要,因为我必须循环一个数组。例如 我只想在()内插入我的或条件?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您可以使用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();

或者,您可以使用and_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();

答案 2 :(得分:1)

使用BETWEEN运算符,您不必拥有循环:

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

这种方法更简洁,因为如果你在1到150之间,你就不会有一个巨大的SQL查询:rate IN (1, 2, 3, 4, 5, ... , 149, 150)而只是rate BETWEEN 1 AND 150。这看起来更合适。