我想在Codeigniter中使用Active Records生成以下SQL代码:
WHERE name != 'Joe' AND (age < 69 OR id > 50)
执行以下操作似乎是我所能做的,我想不出如何对它们进行分组
$this->db->select()->from('users')->where('name !=', 'Joe')->where('age <', 69)->or_where('id <', $id);
有什么想法吗?我的SQL查询太复杂了,所以我不希望用传统的SQL重写所有内容。
更新
我的SQL代码是根据传递给model方法的某些参数的值动态生成的。不能使用括号的问题导致了一个问题,因为运算符的优先级是这样的:在OR
之前首先计算AND
。
*这是我的活动记录代码的一部分,其中在它之前和之后还有一些其他代码:
... some $this->db->where() ...
... some $this->db->where() ...
if($price_range) {
$price_array = explode('.', $price_range);
for($i = 0; $i < count($price_array); $i++) {
if($i == 0) {
$this->db->where('places.price_range', $price_array[$i]);
} else {
$this->db->or_where('places.price_range', $price_array[$i]);
}
}
}
... some $this->db->where() ...
... some $this->db->where() ...
问题来了,因为我使用的是$this->db->or_where()
,它引入了一个OR
子句,该子句将运算符的优先级打乱,而不能使用( )
更改顺序。
**有没有办法解决这个问题?**
发布于 2011-06-25 02:25:43
解决了。动态生成SQL查询并将其插入到$this->db->where()
中。谢谢你们!
发布于 2016-01-20 21:01:44
在Codeigniter 3.0.3中,你可以像这样简单地完成:
$this->db->select()
->from('users')
->where('name !=', 'Joe')
->group_start() // Open bracket
->where('age <', 69)
->or_where('id <', $id)
->group_end(); // Close bracket
也许它能帮上忙
发布于 2011-06-24 23:52:36
您可以使用一个大字符串。
$this->db->select()->from('users')->where("name != 'Joe' AND (age < 69 OR id > 50) ");
https://stackoverflow.com/questions/6470267
复制相似问题