使用JOIN的Codeigniter模型,当两个WHERE组合时,结果为false

时间:2016-03-09 07:54:39

标签: sql codeigniter model

我有两个表,第一个表是'data_table',其中包含所有信息,如(name,address..etc。),第二个表是'members_table',它包含了id的内容。第一个表是特定组的成员(组1,组2等等)。现在我想要实现的是:我想从id's得到所有'data_table'不是查询的特定组的成员。我试过的是:

 $this->db->select(); 
  $this->db->from('data_table'); 
  $this->db->join('members_table', 'data_table.id = members_table.id', 'left');   
 $this->db->where('members_table.id', NULL); 
$query = $this->db->get(); 
return $query->result_array();   

这是我的查询,以获取尚未在members_table中显示结果的所有名称,该结果是布尔值TRUE但是如果添加了行:

$this->db->where('members_table.group !=', 'group1');

我的查询如下:

$this->db->select(); 
$this->db->from('data_table'); 
$this->db->join('members_table', 'data_table.id = members_table.id', 'left');   
$this->db->where('members_table.id', NULL); 
$this->db->where('members_table.group !=', 'group1'); 
$query = $this->db->get(); 
return $query->result_array();

我得到0结果。这样做的目的是,例如,如果我想检查谁还不是group1的成员但可以已经是另一个组的成员或者根本不是任何组的成员。如果我查询:

$this->db->select(); 
$this->db->from('data_table'); 
$this->db->join('members_table', 'data_table.id = members_table.id', 'left');   
 $this->db->where('members_table.group !=', 'group1');
 $query = $this->db->get(); 
return $query->result_array();  

我只得到除了group1之外属于群组成员的人的ID的结果,但是根本没有任何群组成员的身份证。什么是最好的方式?任何SQL行答案都没问题。感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,以下内容应该有效

$query = $this->db
    ->select("dt.*")
    ->from("data_table AS dt")
    ->join("members_table AS mt1","dt.id = mt1.id", "left")
    ->join("members_table AS mt2","dt.id = mt2.id","left")
    ->where("mt1.id",NULL)
    ->or_where("mt2.group !=","group1")
    ->get();
return $query->result_array();