2013-03-14 3 views
2

왼쪽 참여 포함 선택을 codeigniter SQL 메서드로 변환하는 방법? 감사. 나는 단지 알고 싶다. 나는 당신의 목표는 코드를 당황하게하는 경우를 제외하고 CodeIgniter의의 액티브 레코드 클래스를 사용하지 않는 것codeigniter mysql 왼쪽 조인 포함 선택

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 

답변

2

codeigniter의 하위 쿼리 방법을 사용하면 codeigniter를 해킹해야 할 수 있습니다. 이 같은 시스템/데이터베이스로 이동/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(); 

을 그리고 귀하의 쿼리입니다 일은 끝났어. 건배!!! 참고 : 하위 쿼리를 사용하는 동안 당신은

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

대신 쿼리를 실행

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

의 사용해야합니다.

지금, 당신은

echo $this->db->last_query(); 
으로 구축 된 쿼리를 확인하실 수 있습니다
0
$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); 

.

"코드를 작성하는 사람이 살고있는 곳을 아는 폭력적인 정신병자 인 것처럼 항상 코드하십시오."