sql >> データベース >  >> RDS >> Mysql

CodeIgniterget_whereを使用して'および'および'または'ステートメントをチェーンします

    Codeigniter 3.0以降、クエリビルダークラスはクエリのグループ化 をサポートしています。

    ドキュメントから:

    $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();
    
    // Generates:
    // SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
    

    編集: あなたの例では、以下を使用します:

    $this->db->select('message, created')->from('logs')
            ->where('username', 'user')
            ->group_start()
                    ->where('created >', '1487695796')
                    ->where('created <', '1487782196')
            ->group_end()
            ->group_start()
                    ->where('message', 'login failure')
                    ->or_where('message', 'login success')
                    ->or_where('message', 'log out')
            ->group_end()               
            ->order_by('created', 'ASC')  
    ->get(); 
    

    または

    $this->db->select('message, created')
            ->group_start()
                    ->where('created >', '1487695796')
                    ->where('created <', '1487782196')
            ->group_end()
            ->group_start()
                    ->where('message', 'login failure')
                    ->or_where('message', 'login success')
                    ->or_where('message', 'log out')
            ->group_end()               
            ->order_by('created', 'ASC')  
    ->get_where('logs', array('username' => 'user') );
    
    // both generate:
    //SELECT `message`, `created` 
    //FROM `logs` 
    //WHERE `username` = 'user' 
    //AND ( `created` > '1487695796' AND `created` < '1487782196' ) 
    //AND ( `message` = 'login failure' OR `message` = 'login success' OR `message` = 'log out' ) 
    //ORDER BY `created` ASC
    

    Codeigniterで生成されたクエリがSQLと一致するかどうかを確認するには、次を使用できます。

    echo $this->db->last_query(); // echos last query string
    


    1. MySQL:MySQLテーブルのすべてのレコードの内部レコード識別子のようなものはありますか?

    2. サブクエリのパフォーマンスが低いPostgreSQLIN演算子

    3. PostgreSQLでの高可用性の管理–パートIII:Patroni

    4. LIKEを使用したSQLUPDATE