CodeIgniter:クエリビルダクラス::クエリのグルーピング / 複雑な条件指定に役立つメソッド

クエリビルダクラス — CodeIgniter 3.2.0-dev ドキュメント

クエリのグルーピング
クエリのグルーピングでは、 WHERE 句を括弧で囲むことでグループを作ることができます。 これにより複雑な WHERE 句のクエリを作ることが可能です。例:

$this->db->select('*')->from('my_table')
        ->group_start()
                ->where('a', 'a')
                ->or_group_start()
                        ->where('b', 'b')
                        ->where('c', 'c')
                ->group_end()
        ->group_end()
        ->where('d', 'd')
->get();

// 次のようになります:
// SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'

注釈
groups は対称であることが求められます。
group_start() が group_end() と合致していることを確認してください。

$this->db->group_start()
#WHERE 句に括弧開きを追加することで
#新しいグループを作ります。
$this->db->or_group_start()
#WHERE 句に括弧開きを追加することで新しいグループを作り、
#‘OR’ を先頭に置きます。
$this->db->not_group_start()
# WHERE 句に括弧開きを追加することで新しいグループを作り、 
#‘NOT’ を先頭に置きます。
$this->db->or_not_group_start()
#WHERE 句に括弧開きを追加することで新しいグループを作り、 
#‘OR NOT’ を先頭に置きます。
$this->db->group_end()
WHERE 句に括弧閉じを追加することで現在のグループを閉じます。