如何在MySQL中联接多个表

时间:2018-08-02 07:39:58

标签: php jquery mysql codeigniter

这是我的代码:

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中的外键。 请帮助我加入公司表以执行此功能。 谢谢。

3 个答案:

答案 0 :(得分:0)

我对您的ORM不熟悉,但这应该是有道理的:

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

在与contract_files表联接之后,也要在company表中也指定要检索的字段。

更新

由于您的查询显示了多个合同文件,因此您必须对company表执行相同的操作,因为每个合同文件可能有许多公司,如果它们都具有同一公司,则外键Company_id应该位于contract_details表中

重要

默认情况下,GROUP_CONCAT()的限制为1024,因此将文件名放在其中并不是最好的主意。

答案 1 :(得分:0)

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;
    }
}

尝试此代码。

答案 2 :(得分:-1)

左联接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;