首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Codeigniter中的WHERE子句分组

Codeigniter中的WHERE子句分组
EN

Stack Overflow用户
提问于 2011-06-24 23:41:51
回答 6查看 33.4K关注 0票数 19

我想在Codeigniter中使用Active Records生成以下SQL代码:

代码语言:javascript
复制
WHERE name != 'Joe' AND (age < 69 OR id > 50)

执行以下操作似乎是我所能做的,我想不出如何对它们进行分组

代码语言:javascript
复制
$this->db->select()->from('users')->where('name !=', 'Joe')->where('age <', 69)->or_where('id <', $id); 

有什么想法吗?我的SQL查询太复杂了,所以我不希望用传统的SQL重写所有内容。

更新

我的SQL代码是根据传递给model方法的某些参数的值动态生成的。不能使用括号的问题导致了一个问题,因为运算符的优先级是这样的:在OR之前首先计算AND

*这是我的活动记录代码的一部分,其中在它之前和之后还有一些其他代码:

代码语言:javascript
复制
            ... 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子句,该子句将运算符的优先级打乱,而不能使用( )更改顺序。

**有没有办法解决这个问题?**

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-25 02:25:43

解决了。动态生成SQL查询并将其插入到$this->db->where()中。谢谢你们!

票数 -10
EN

Stack Overflow用户

发布于 2016-01-20 21:01:44

在Codeigniter 3.0.3中,你可以像这样简单地完成:

代码语言:javascript
复制
$this->db->select()
  ->from('users')
  ->where('name !=', 'Joe')
  ->group_start() // Open bracket
  ->where('age <', 69)
  ->or_where('id <', $id)
  ->group_end(); // Close bracket

也许它能帮上忙

票数 29
EN

Stack Overflow用户

发布于 2011-06-24 23:52:36

您可以使用一个大字符串。

$this->db->select()->from('users')->where("name != 'Joe' AND (age < 69 OR id > 50) ");

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6470267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档