我有一个复杂的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是 整数值
答案 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'
);