2016-11-23 4 views
4

私の質問に角括弧を追加することができません。私のクエリはOR,ANDLIKEで構成されています。これは私のMySQLのクエリです:CodeIgniterのOR_LIKEクエリに角括弧を追加する

SELECT * FROM (`vendor`) JOIN `vendor_detail` ON `vendor`.`id_vendor` 
= `vendor_detail`.`id_vendor` JOIN `klasifikasi` ON `vendor_detail`.`id_klasifikasi` = `klasifikasi`.`id_klasifikasi` 
WHERE `vendor_detail`.`id_klasifikasi` = 'K0002' AND 
`vendor`.`st_aktif` = 1 AND (`vendor`.`id_vendor` LIKE '%eka%' OR 
`vendor`.`nama_vendor` LIKE '%eka%' OR `vendor`.`alamat` LIKE '%eka%' 
OR `vendor`.`telp` LIKE '%eka%' OR `vendor`.`mobile` LIKE '%eka%' OR 
`vendor`.`fax` LIKE '%eka%' OR `vendor`.`cp` LIKE '%eka%' OR 
`vendor`.`telp_cp` LIKE '%eka%' OR `vendor`.`catatan` LIKE '%eka%' OR 
`vendor`.`email` LIKE '%eka%') 

あなたは私がvendor.st_aktif = 1 AND後、私のクエリの最後の行に括弧を追加してい見ることができるように。
上記のクエリをCode Igniter Active Recordsに実装するにはどうすればよいですか?
これは私の現在のCIのARです:

function src_vendor_by_name($src_nama,$src_kls){ 
    $this->db->select('*'); 
    $this->db->from('vendor'); 
    $this->db->join('vendor_detail', 'vendor.id_vendor = vendor_detail.id_vendor'); 
    $this->db->join('klasifikasi', 'vendor_detail.id_klasifikasi = klasifikasi.id_klasifikasi'); 
    $this->db->where('vendor_detail.id_dklasifikasi', $src_kls); 
    $this->db->where('vendor.st_aktif', 1); 

    if($src_nama != "") 
    { 
     $this->db->or_like('vendor.id_vendor',$src_nama); 
     $this->db->or_like('vendor.nama_vendor',$src_nama); 
     $this->db->or_like('vendor.alamat',$src_nama); 
     $this->db->or_like('vendor.telp',$src_nama); 
     $this->db->or_like('vendor.mobile',$src_nama); 
     $this->db->or_like('vendor.fax',$src_nama); 
     $this->db->or_like('vendor.cp',$src_nama); 
     $this->db->or_like('vendor.telp_cp',$src_nama); 
     $this->db->or_like('vendor.catatan',$src_nama); 
     $this->db->or_like('vendor.email',$src_nama); 
    } 

    return $this->db->get()->result_array(); 
} 
+0

なぜあなたはカスタムクエリ –

+0

を使用していないのですか?私はそれがアクティブなレコードでないかどうかは確信していません – Simba

+0

ARはネストされた 'WHERE'句AFAIKをサポートしていないので、生のSQLを使うことに戻ります。 –

答えて

4

私は純粋なCodeIgniterのは、あなたがネストされたWHERE句にあなたがそれをやりたいの方法を行うことができないと思います。しかし、一つのオプションは、カスタム文字列を使用することです:

には、ネストされた WHERE文をサポートして表示されます IgnitedQueryと呼ばれるものがあります
$where = "(`vendor`.`id_vendor` LIKE '%eka%' OR "; 
$where .= "`vendor`.`nama_vendor` LIKE '%eka%' OR"; 
$where .= "`vendor`.`alamat` LIKE '%eka%' OR "; 
$where .= "`vendor`.`telp` LIKE '%eka%' OR "; 
$where .= "`vendor`.`mobile` LIKE '%eka%' OR "; 
$where .= "`vendor`.`fax` LIKE '%eka%' OR "; 
$where .= "`vendor`.`cp` LIKE '%eka%' OR "; 
$where .= "`vendor`.`telp_cp` LIKE '%eka%' OR "; 
$where .= "`vendor`.`catatan` LIKE '%eka%' OR "; 
$where .= "`vendor`.`email` LIKE '%eka%')"; 
$this->db->where($where); 

+0

安全ですか?角括弧はどこですか?私は括弧が追加されて表示されません。 – Simba

+0

安全です。角括弧は暗黙的なものです。なぜなら、このWHERE条件全体が残りの式にANDされるからです。これはあなたが望むようなロジックです。 –

+0

これは機能しません。クエリを見るために私のモデルに誤ってエラーが発生した場合は、括弧は追加されません。 – Simba

0

最初の状態を確認してください '%のエカの%'(VAR)

If('%eka%' != ''){ 
    $where = "(`vendor`.`id_vendor` LIKE '%eka%' OR `vendor`.`nama_vendor` LIKE '%eka%' OR `vendor`.`alamat` LIKE '%eka%' OR `vendor`.`telp` LIKE '%eka%' OR `vendor`.`mobile` LIKE '%eka%' OR `vendor`.`fax` LIKE '%eka%' OR `vendor`.`cp` LIKE '%eka%' OR `vendor`.`telp_cp` LIKE '%eka%' OR `vendor`.`catatan` LIKE '%eka%' OR `vendor`.`email` LIKE '%eka%')"; 
    $this->db->where($where); 
} 
1

単純に使用します。

ます$ this-> DB-> group_start()

$この - > db-> group_end()

関連する問題