2010-06-04 40 views
19

Tôi đang sử dụng đoạn mã sau để lựa chọn từ một cơ sở dữ liệu MySQL với một webapp Code Igniter:CodeIgniter: Làm thế nào để sử dụng mệnh đề WHERE và OR khoản

$query = $this->db->get_where('mytable',array('id'=>10)); 

này hoạt động tuyệt vời! Nhưng tôi muốn viết câu lệnh MySQL sau bằng cách sử dụng thư viện CI?

SELECT * FROM `mytable` WHERE `id`='10' OR `field`='value' 

Bất kỳ ý tưởng nào? Cảm ơn!

Trả lời

32
$where = "name='Joe' AND status='boss' OR status='active'"; 

$this->db->where($where); 
+0

mặc dù tôi chỉ trễ 3 năm nhưng từ bảng nào sẽ nhận được? làm thế nào để xác định bảng –

+2

Mặc dù tôi là 3/4 của một tháng trễ, bạn vẫn thực hiện sau đây sau khi điều khoản của bạn được xác định ... $ this-> db-> get ("tbl_name"); – James

+0

'$ where = '(name =" Joe "AND status =" boss "HOẶC status =" active ")';' Xem: http://stackoverflow.com/a/9941814/594235 – Sparky

28

Bạn có thể sử dụng or_where() cho rằng - ví dụ từ các tài liệu CI:

$this->db->where('name !=', $name); 

$this->db->or_where('id >', $id); 

// Produces: WHERE name != 'Joe' OR id > 50 
+0

theo tài liệu or_where là không được chấp nhận. http://codeigniter.com/user_guide/database/active_record.html –

+6

Tôi tin rằng bạn có thể đã hiểu sai. Dường như với tôi để nói rằng phương thức cũ, orwhere(), đã bị phản đối vì lợi ích của phương thức mới or_where(). – Rookwood

+0

Cảm ơn bạn đã làm rõ điều này! giúp đỡ lớn ngay cả 4 năm sau! – Awilson089

11

Bạn có thể sử dụng này:

$this->db->select('*'); 
$this->db->from('mytable'); 
$this->db->where(name,'Joe'); 
$bind = array('boss', 'active'); 
$this->db->where_in('status', $bind); 
+0

Làm cách nào để nhận kết quả? – Sahan

+0

Các kết quả được lưu trữ ở đâu? – Sahan

6

kích hoạt phương pháp kỷ lục or_where được sử dụng:

$this->db->select("*") 
->from("table_name") 
->where("first", $first) 
->or_where("second", $second); 
0
$where = "name='Joe' AND status='boss' OR status='active'"; 

$this->db->where($where); 

Mặc dù tôi 3/4 của một tháng cuối năm, bạn vẫn thực hiện như sau sau của bạn, nơi các điều khoản được quy định ... $this->db->get("tbl_name");

0

gì làm việc cho tôi:

$where = ''; 
    /* $this->db->like('ust.title',$query_data['search']) 
     ->or_like('usr.f_name',$query_data['search']) 
     ->or_like('usr.l_name',$query_data['search']);*/ 
     $where .= "(ust.title like '%".$query_data['search']."%'"; 
     $where .= " or usr.f_name like '%".$query_data['search']."%'"; 
     $where .= "or usr.l_name like '%".$query_data['search']."%')"; 
     $this->db->where($where); 



$datas = $this->db->join(TBL_USERS.' AS usr','ust.user_id=usr.id') 
      ->where_in('ust.id', $blog_list) 
      ->select('ust.*,usr.f_name as f_name,usr.email as email,usr.avatar as avatar, usr.sex as sex') 
      ->get_where(TBL_GURU_BLOG.' AS ust',[ 
       'ust.deleted_at'  => NULL, 
       'ust.status'  => 1, 
      ]); 

tôi phải làm điều này để tạo một truy vấn như sau:

SELECT `ust`.*, `usr`.`f_name` as `f_name`, `usr`.`email` as `email`, `usr`.`avatar` as `avatar`, `usr`.`sex` as `sex` FROM `blog` AS `ust` JOIN `users` AS `usr` ON `ust`.`user_id`=`usr`.`id` WHERE (`ust`.`title` LIKE '%mer%' ESCAPE '!' OR `usr`.`f_name` LIKE '%lok%' ESCAPE '!' OR `usr`.`l_name` LIKE '%mer%' ESCAPE '!') AND `ust`.`id` IN('36', '37', '38') AND `ust`.`deleted_at` IS NULL AND `ust`.`status` = 1 ; 
Các vấn đề liên quan