我想使用Codeigniter中的Active Record生成以下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代码是根据传递给模型方法的某些参数的值动态生成的。不能使用括号的问题会引起问题,因为运算符优先级是AND先评估的OR。
*这是我的活动记录代码的一部分,在此之前和之后还有一些其他代码:
... 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子句,该子句使运算符的优先级陷入混乱,而又无法( )用来更改顺序。
有什么办法可以解决这个问题?
在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来源:stack overflow 也许可以帮助来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。