繁体   English   中英

Codeigniter,使用WHERE子句连接两个表

[英]Codeigniter, join of two tables with a WHERE clause

我有以下代码:

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 *访问代码,日期和时间,来自访问表WHERE chain_code ='123'AND codenames.accselect_lista!= 0

因此,基本上, accesstable的列code是一个数字,比方说33 ,该数字也存在于codenames表中; 在最后一个表中,有一个字段accselect_lista

所以,我必须只选择accselect_lista != 0 ,并从那里得到corrisponding accesstable其中代号是在选定的那些行的codenames

寻找这个吗?

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

它将为指定的条件调出两个表中的所有列。 显然,表名和列名需要准确。

好的开始! 但我认为您可能在这里混用了一些技巧。

首先,有两种主要方法可以运行多个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的Active Record文档(如果您还没有的话),它包含大量示例,提供了更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM