2010-06-04 28 views
19

estoy usando el siguiente código para seleccionar de una base de datos MySQL con una aplicación web CodeIgniter:CodeIgniter: Cómo utilizar la cláusula WHERE y cláusula OR

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

Esto funciona muy bien! Pero quiero escribir la siguiente declaración de MySQL usando la biblioteca de CI.

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

¿Alguna idea? Gracias!

Respuesta

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

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

aunque tengo solo 3 años de retraso, pero ¿de qué mesa lo sacará? cómo especificar la tabla –

+2

Aunque tengo 3/4 de un mes de retraso, aún ejecuta lo siguiente después de que sus cláusulas where estén definidas ... $ this-> db-> get ("tbl_name"); – James

+0

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

28

Puede utilizar or_where() para que - ejemplo de los documentos CI:

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

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

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

de acuerdo con la documentación o donde está obsoleto. http://codeigniter.com/user_guide/database/active_record.html –

+6

Creo que es posible que haya leído mal. Me parece estar diciendo que el método anterior, owhere(), se ha desaprobado a favor del nuevo método or_where(). – Rookwood

+0

¡Gracias por aclarar esto! ¡gran ayuda incluso 4 años después! – Awilson089

11

Se puede utilizar esta:

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

¿Cómo obtengo los resultados? – Sahan

+0

¿Dónde se almacenan los resultados? – Sahan

6

activa método de grabación or_where se va a utilizar:

$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); 

Aunque soy 3/4 de un mes de retraso, todavía se ejecuta la siguiente después de la que se definen las cláusulas ... $this->db->get("tbl_name");

0

Lo que funcionó para mí:

$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, 
      ]); 

que tengo que hacer esto para crear una consulta como esta:

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 ;