[英]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);
活動記錄將自行使用“和”等格式化查詢。
添加聯接的最簡單方法是將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的Active Record文檔(如果您還沒有的話),它包含大量示例,提供了更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.