Вот мои коды:
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. Пожалуйста, помогите мне присоединиться к таблице компании для этой функции. Спасибо.
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;
}
}
Попробуйте этот код.
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;
Я не знаком с вашим ORM, но это должно иметь смысл:
$this->db->join('company', 'cf.Company_id = company.Company_Id','INNER');
Сразу после присоединения к таблице contract_files также укажите поля, которые вы хотите получить и из таблицы компании.
ОБНОВИТЬ
Поскольку ваш запрос вызывает несколько файлов контракта, вам придется делать то же самое с таблицей компаний, поскольку каждый файл контракта может иметь много компаний. Если все они имеют одну и ту же компанию, тогда внешний ключ Company_id должен быть в таблице contract_details.
ВАЖНЫЙ
По умолчанию GROUP_CONCAT() имеет ограничение по 1024, поэтому это не лучшая идея поместить в него имена файлов.