2016-08-25 33 views
1

我已经检查对此其他问题与SQL语句或条款,但未能解决问题如何改写笨

$this->db->where(array('sender_deletedS' => 1, 'receiver_deleted' => 0)); 
      $this->db->or_where(array('sender_deletedS' => 0, 'receiver_deleted' => 1)); 
      $this->db->or_where(array('sender_deletedS' => 0, 'receiver_deleted' => 0)); 
      $query2 = $this->db->get('message'); 

它产生

SELECT * FROM `message` WHERE `sender_deletedS` = 1 AND `receiver_deleted` =0 OR `sender_deletedS` =0 OR `receiver_deleted` = 1 OR `sender_deletedS` =0 OR `receiver_deleted` =0 

,但我想这

SELECT * FROM `message` WHERE `sender_deletedS` = 1 AND `receiver_deleted` =0 OR `sender_deletedS` =0 AND `receiver_deleted` = 1 OR `sender_deletedS` =0 AND `receiver_deleted` =0 

回答

1
$sql = "sender_deleted = 1 AND receiver_deleted = 0 OR sender_deleted = 0 AND receiver_deleted = 1 OR 
sender_deleted = 0 AND receiver_deleted = 0 
"; 

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

$this->db->get('message') ; 

该声明可以被存储并且使用如上例所示的变量执行

1

如果您使用Query Builder或Active Record非常混乱,请尝试传统的SQL方法。这也容易理解

$this->db->query("SELECT * FROM `message` WHERE `sender_deletedS` = 1 AND `receiver_deleted` =0 OR `sender_deletedS` =0 AND `receiver_deleted` = 1 OR `sender_deletedS` =0 AND `receiver_deleted` =0"); 

or_where会产生一个OR加入语句。如果其合并其行为为AND

实施例01

$this->db->or_where('user_id =', 0); 
$this->db->or_where('member_id =', 1); 

输出将是

WHERE user_id = 0 OR member_id = 1 

实施例02

$this->db->or_where(array('user_id' => 0, 'member_id' => 1)); 

输出将是

WHERE user_id = 0 AND member_id = 1 

实施例03

$this->db->or_where(array('user_id' => 0, 'member_id' => 1)); 
$this->db->or_where('library_id =', 0); 

输出将是

WHERE user_id = 0 AND member_id = 1 OR library_id = 0 

$this->db->or_where() in codeigniter.com