开发者社区> 问答> 正文

在Codeigniter中将WHERE子句分组?mysql

我想使用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子句,该子句使运算符的优先级陷入混乱,而又无法( )用来更改顺序。

有什么办法可以解决这个问题?

展开
收起
保持可爱mmm 2020-05-17 20:06:23 926 0
1 条回答
写回答
取消 提交回答
  • 在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

    2020-05-17 20:13:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像