codeigniter mysql left join include select

Как преобразовать левое соединение include выберите метод codeigniter sql? Благодарю. Я просто хочу знать.

SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_type, c2.c2_status, f.f_id, f.f_name, f2.f2_id, f2.f2_name FROM category2 c2 LEFT JOIN category1 c1 ON c1.c1_id = c2.c1_id LEFT JOIN ( SELECT DISTINCT c2_id, f_id, f_name FROM file ORDER BY f_id DESC ) f ON f.c2_id = c2.c2_id LEFT JOIN ( SELECT DISTINCT c2_id, f2_id, f2_name FROM file2 ORDER BY f2_id DESC ) f2 ON f2.c2_id = c2.c2_id WHERE c2.c2_status = 1 GROUP BY c2.c2_id 

Вы можете использовать метод sub query codeigniter, чтобы сделать это для этой цели, вам придется взломать codeigniter. например, Перейти к системе / database / DB_active_rec.php Удалить общедоступное или защищенное ключевое слово из этих функций

 public function _compile_select($select_override = FALSE) public function _reset_select() 

Теперь запись подзапроса в наличии И теперь вот ваш запрос с активной записью

 $select = array('DISTINCT c2_id','f_id','f_name'); $this->db->select($select); $this->db->from('file'); $this->db->order_by('f_id','DESC'); $subQuery1 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); $select = array('DISTINCT c2_id','f_id','f2_name'); $this->db->select($select); $this->db->from('file2'); $this->db->order_by('f2_id','DESC'); $subQuery2 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); // And now your main query $select = array( 'c1.c1_id', 'c1.c1_name', 'c2.c2_id', 'c2.c2_name', 'c2.c2_type', 'c2.c2_status', 'f.f_id', 'f.f_name', 'f2.f2_id', 'f2.f2_name' ); $this->db->select($select); $this->db->from('category2 c2'); $this->db->join("($subQuery1)",'f.c2_id = c2.c2_id','left'); $this->db->join("($subQuery2)",'f2.c2_id = c2.c2_id','left'); $this->db->where('c2.c2_status',1); $this->db->group_by('c2.c2_id'); $main_query = $this->db->get(); с $select = array('DISTINCT c2_id','f_id','f_name'); $this->db->select($select); $this->db->from('file'); $this->db->order_by('f_id','DESC'); $subQuery1 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); $select = array('DISTINCT c2_id','f_id','f2_name'); $this->db->select($select); $this->db->from('file2'); $this->db->order_by('f2_id','DESC'); $subQuery2 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); // And now your main query $select = array( 'c1.c1_id', 'c1.c1_name', 'c2.c2_id', 'c2.c2_name', 'c2.c2_type', 'c2.c2_status', 'f.f_id', 'f.f_name', 'f2.f2_id', 'f2.f2_name' ); $this->db->select($select); $this->db->from('category2 c2'); $this->db->join("($subQuery1)",'f.c2_id = c2.c2_id','left'); $this->db->join("($subQuery2)",'f2.c2_id = c2.c2_id','left'); $this->db->where('c2.c2_status',1); $this->db->group_by('c2.c2_id'); $main_query = $this->db->get(); с $select = array('DISTINCT c2_id','f_id','f_name'); $this->db->select($select); $this->db->from('file'); $this->db->order_by('f_id','DESC'); $subQuery1 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); $select = array('DISTINCT c2_id','f_id','f2_name'); $this->db->select($select); $this->db->from('file2'); $this->db->order_by('f2_id','DESC'); $subQuery2 = $this->db->_compile_select(); unset($select); $this->db->_reset_select(); // And now your main query $select = array( 'c1.c1_id', 'c1.c1_name', 'c2.c2_id', 'c2.c2_name', 'c2.c2_type', 'c2.c2_status', 'f.f_id', 'f.f_name', 'f2.f2_id', 'f2.f2_name' ); $this->db->select($select); $this->db->from('category2 c2'); $this->db->join("($subQuery1)",'f.c2_id = c2.c2_id','left'); $this->db->join("($subQuery2)",'f2.c2_id = c2.c2_id','left'); $this->db->where('c2.c2_status',1); $this->db->group_by('c2.c2_id'); $main_query = $this->db->get(); 

И дело сделано. Ура !!! Примечание. При использовании подзапросов вы должны использовать

 $this->db->from('myTable') 

вместо

 $this->db->get('myTable') 

который запускает запрос.

Теперь вы можете проверить запрос, который был создан как

 echo $this->db->last_query(); 
 $query='SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_type, c2.c2_status, f.f_id, f.f_name, f2.f2_id, f2.f2_name FROM category2 c2 LEFT JOIN category1 c1 ON c1.c1_id = c2.c1_id LEFT JOIN ( SELECT DISTINCT c2_id, f_id, f_name FROM file ORDER BY f_id DESC ) f ON f.c2_id = c2.c2_id LEFT JOIN ( SELECT DISTINCT c2_id, f2_id, f2_name FROM file2 ORDER BY f2_id DESC ) f2 ON f2.c2_id = c2.c2_id WHERE c2.c2_status = ? GROUP BY c2.c2_id'; $params=array(); $params[]=1; $result=$this->db->query($query,$params); $result=$result->result_array(); print_r($result); 

Я бы не стал использовать класс Active Record для Codeigniter, если ваша цель – не запутать ваш код.

«Всегда указывайте, как будто человек, который заканчивает поддерживать ваш код, является жестоким психопатом, который знает, где вы живете».