簡體   English   中英

如何在MySQL中聯接多個表

[英]How to join multiple tables in MySQL

這是我的代碼:

public function getallcontractfiles()
{
    $this->db->select('cd.*, GROUP_CONCAT(cf.Contract_File_Name) AS fileslink');         
    $this->db->from('contract_details as cd');
    $this->db->join('contract_files as cf', 'cd.Contract_Id = cf.Contract_Id','LEFT'); 

    if($this->session->userdata['user_type'] == 'ADMIN' && $this->session->userdata['user_group'] == '' ){
        $this->db->where('cd.Company_id',$this->session->userdata['company_id']);
        }
    if($this->session->userdata['user_type'] == 'USER'){
    $this->db->where('cd.users_id',$this->session->userdata['logged_user']);
    }
     $this->db->group_by('cd.Contract_Id '); 
    $this->db->order_by('cd.Contract_Id', 'desc');
     $query = $this->db->get();
    // print_r($this->db->last_query()); die;

        if ( $query->num_rows() > 0 )
        {
            foreach($query->result() as $row){
                $rows[] = $row;
            }
            return $rows;
        }
}

我的問題是:我還有一個名為company的表,我的App即將打印出與其公司的所有合同文件。 我已經將Company_id定義為Contract_files中的外鍵。 請幫助我加入公司表以執行此功能。 謝謝。

我不熟悉您的ORM,但這應該是有道理的:

$this->db->join('company', 'cf.Company_id = company.Company_Id','INNER');

在與contract_files表聯接之后,立即在from公司表中也指定要檢索的字段。

更新

由於您的查詢顯示了多個合同文件,因此您必須對company表執行相同的操作,因為每個合同文件可能有許多公司,如果它們都具有相同的公司,則外鍵Company_id應該位於contract_details表中。

重要

GROUP_CONCAT()默認情況下限制為1024,因此將文件名放在其中並不是最好的主意。

public function getallcontractfiles(){
$this->db->select('cd.*, GROUP_CONCAT(cf.Contract_File_Name) AS fileslink');         
$this->db->from('contract_details as cd');
$this->db->join('contract_files as cf', 'cd.Contract_Id = cf.Contract_Id'); 

if($this->session->userdata('user_type') == 'ADMIN' && $this->session->userdata('user_group') == '' ){
    $this->db->where('cd.Company_id',$this->session->userdata('company_id'));
    }
if($this->session->userdata('user_type') == 'USER'){
$this->db->where('cd.users_id',$this->session->userdata('logged_user'));
}
 $this->db->group_by('cd.Contract_Id '); 
$this->db->order_by('cd.Contract_Id', 'desc');
 $query = $this->db->get();
// print_r($this->db->last_query()); die;

    if ( $query->num_rows() > 0 )
    {
        foreach($query->result() as $row){
            $rows[] = $row;
        }
        return $rows;
    }
}

嘗試此代碼。

左聯接table2 ON table1.column_name = table2.column_name;

右聯接table2 ON table1.column_name = table2.column_name;

INNER JOIN table2 ON table1.column_name = table2.column_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM