Как объединить несколько таблиц в MySQL

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','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_id как внешний ключ в Contract_files. Пожалуйста, помогите мне присоединиться к таблице компании для этой функции. Спасибо.

  • 0
    GROUP_CONCAT кажется довольно противоречащим всему предприятию
Теги:
codeigniter

3 ответа

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

Попробуйте этот код.

0

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

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

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

  • 2
    Добро пожаловать в StackOverflow. Я бы посоветовал вам отредактировать этот ответ, чтобы предоставить некоторую описательную часть, чтобы отличить три предложенных вами типа объединения (учитывая, что спрашивающий явно не знаком с sql).
0

Я не знаком с вашим ORM, но это должно иметь смысл:

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

Сразу после присоединения к таблице contract_files также укажите поля, которые вы хотите получить и из таблицы компании.

ОБНОВИТЬ

Поскольку ваш запрос вызывает несколько файлов контракта, вам придется делать то же самое с таблицей компаний, поскольку каждый файл контракта может иметь много компаний. Если все они имеют одну и ту же компанию, тогда внешний ключ Company_id должен быть в таблице contract_details.

ВАЖНЫЙ

По умолчанию GROUP_CONCAT() имеет ограничение по 1024, поэтому это не лучшая идея поместить в него имена файлов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню