0

我有一个在 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();

请不要告诉我手动编写查询之类的其他方式,因为我已经简化了它,并且是进行手动查询的地方。
循环很重要,因为我必须循环一个数组。
我只想在 a 中插入我的 or 条件()是可能的吗?

4

3 回答 3

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();
于 2013-08-07T15:58:01.393 回答
2

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

$opts = array();
for ($i = 1; $i <=3; $i++) {
    $opts[] = $i;
}
$this->db->where_in('rate', $opts);
于 2013-08-07T15:57:08.593 回答
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. 这似乎更合适。

于 2013-08-07T16:10:22.983 回答