Codeigniter,带有WHERE子句的两个表的连接

时间:2014-06-15 22:05:51

标签: php mysql sql codeigniter

我有这段代码:

public function getAllAccess(){
    $this->db->select('accesscode');
    $this->db->where(array('chain_code' => '123');        
    $this->db->order_by('dateandtime', 'desc');
    $this->db->limit($this->config->item('access_limit'));
    return $this->db->get('accesstable')->result();
}

我需要将它加入另一个表(codenamed表),我要告诉它。不是真正的文字查询,而是我想要实现的目标:

  

SELECT * accesscode,dateandtime FROM access table WHERE chain_code ='123'ANDdenames.accselect_lista!= 0

所以基本上accesstable有一个列code是一个数字,我们说33,这个数字也出现在codenames表中;在最后一个表格中有一个字段accselect_lista

所以我必须只选择accselect_lista != 0并从那里获得相应的accesstable行,其中代号是在codenames中选择的代码。

2 个答案:

答案 0 :(得分:1)

寻找这个?

SELECT * 
FROM access_table a INNER JOIN codenames c ON
     a.chain_code = c.chain_code
WHERE a.chain_code = '123' AND
      c.accselect_lista != 0

它将根据指定的条件显示两个表中的所有列。显然,表名和列名必须准确。

答案 1 :(得分:1)

良好的开端!但我想你可能会在这里混淆一​​些技巧。

首先,有两种主要方法可以运行多个where查询。你可以使用一个关联数组(就像你开始那样)。

$this->db->where(array('accesstable.chain_code' => '123', 'codenames.accselect_lista !=' => 0)); 

请注意,我已将表名附加到每列。另请注意,如果将它们包含在与列名相同的块中,则可以添加备用运算符。

或者你可以给自己的每一行。我更喜欢这种方法,因为我认为它更容易阅读。两者都将完成同样的事情。

$this->db->where('accesstable.chain_code', '123');
$this->db->where('codenames.accselect_lista !=', 0);

有效记录会使用'和'格式化查询。等等。

添加联接的最简单方法是将fromjoin一起使用。

$this->db->from('accesstable');
$this->db->join('codenames', 'codenames.accselect_lista = accesstable.code');

使用from时,您不需要在get中包含表名,因此要运行查询,您现在可以使用以下内容:

$query = $this->db->get();
return $query->result();

如果您还没有查看Codeigniter's Active Record文档,可以通过大量示例了解更多细节。