簡體   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