我有这段代码:
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
中选择的代码。
答案 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);
有效记录会使用'和'格式化查询。等等。
添加联接的最简单方法是将from
与join
一起使用。
$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文档,可以通过大量示例了解更多细节。