Codeigniter活动记录And或where子句中具有多个和嵌套组的组合

时间:2018-12-07 12:14:40

标签: codeigniter activerecord codeigniter-3 codeigniter-2

我有一个复杂的SQL查询,我想通过Active Records实现它。此查询具有与另一个条件组合在一起的多个AND / OR子句。我浏览了多篇文章,他们说我们可以使用 group_start() group_end(),但是我想知道是否也可以在另一个组内启动一个组吗?需要将结果序列号从外部查询产生的结果集中排除。实际上,我在这里尝试使用Join,但是没有用。关于连接的任何可行构想也将是可理解的。

正如您在下面的查询中看到的那样,我使用了双圆括号来表示一个组中的多个组。 生成的序列号也需要从外部查询的结果中排除。请告诉我它的Codeigniter Active Record等效代码是什么。

select * from table2 WHERE NOT table2.serial IN (select columnname from table where ((col < val and val < col) or (col < val and val < col) or(val=col and val=col)) AND incol=intval AND intcol=intval)
  

在这里,col是列名,val是DATE类型的值,intval是   整数值

1 个答案:

答案 0 :(得分:1)

尝试这种语法

$this->db->select("*")->from("table");
    $this->db->group_start();
        $this->db->group_start();
            $this->db->where("val <",'col');
            $this->db->where("val <",'col');
        $this->db->group_end();
        $this->db->or_group_start();
            $this->db->or_where("val <",'col');
            $this->db->where("val <",'col');
        $this->db->group_end();
        $this->db->or_group_start();
            $this->db->or_where("val ",'col');
            $this->db->where("val ",'col');
        $this->db->group_end();
    $this->db->group_end();
    $this->db->where("incol ",'intval');
    $this->db->where("incol ",'intval');
    $this->db->get();
    $last_query = $this->db->last_query();

    $this->db->select('*')->from('table2');
    $this->db->where_not_in('serial',$last_query);
    $this->db->get();
    echo $this->db->last_query();

上面产生的查询字符串是

SELECT * FROM `table2` WHERE
     `serial` NOT IN(
    SELECT columnname FROM `table` WHERE
    (
        (`val` < 'col' AND `val` < 'col') OR
        (`val` < 'col' AND `val` < 'col') OR
        (`val` = 'col' AND `val` = 'col') 
    ) AND `incol` = 'intval' AND `incol` = 'intval'
);