CI 묻고 답하기

제목 이럴경우 join문 사용 방법.(수정)
글쓴이 수야디벨 작성시각 2013/03/06 16:41:49
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 13693   RSS
 $this->db->select('A');
 $this->db->select('B');
 $this->db->select('C');
 $this->db->select('sysdate() as sysdate');

 $this->db->order_by('A','desc');
 $this->db->limit(8);
 $this->db->where('index',$index);
 $query = $this->db->get('table');

  return $query->result();


이런식으로 하나의 쿼리문을 돌려서 사용하고 있었는데요.
(sysdate를 쓰기위해서 귀찮지만 일일이 셀렉트를 ..)

이 테이블과 , 다른 테이블의 join이 필요해졌습니다.


지금 위의 식만 보면 'table' 이라는 테이블에서 DB를 가져오는데,
위에서 걸어 놓은 table의 조건을 그대로 유지하면서,
위 결과 값을 가지고.

이를 'other_table' 과 index 컬럼이 같은 것 끼리 JOIN 시켜주려면 어떻게 액티브 레코드를 구성 해야할까요?ㅠ


///////////////////////////////// 가 아까 질문이였는데. 혼자서 이것저것 테스트 해봐서 이렇게 해결했습니다.

 $this->db->select('table.A');
 $this->db->select('table.B');
 $this->db->select('table.C');
 $this->db->select('sysdate() as sysdate');

 $this->db->order_by('table.A','desc');
 $this->db->limit(8);
 $this->db->where('table.index',$index);


$this->db->from('table');
$this->db->join('other_table', 'table.index = other_table.index');

$query = $this->db->get();

return $query->result();


이렇게 하니 , join은되더라구요. 그런데 문제가 있습니다.

두 컬럼이 같은 index를 기준으로 합쳐져서 컬럼이 늘어나는게 아니라.

딱 , 저기서 지정한 A,B,C  컬럼의 값만 보인다는겁니다.

추측컨데, 빨간부분의 쿼리가 돌고, 그 결과값으로 join을 실행하는데,

그 실행 값이 other_table의 inex와 같은것만 보여주는거 같더라구요.



저렇게 셀렉트를해서, 딱 저 컬럼만 보여주는거 같습니다. 실제로 other_table에는 D,E,F처럼 여러 컬럼들이 더 있거든요.

그렇다고, select문에서 table. 처럼 앞에 테이블을 지정해주지않으면,

컬럼이 모호하다는 DB에러가 나버립니다.






제가 join을 하려는 이유가 , 빨간 부분에서 C라는 컬럼이 얻어지지만, 

Other_table에서 'table' 테이블의 index와 같은 것 중. 통일한 명칭의 C라는 컬럼을 가져오고 싶었기 때문이거든요.ㅜ

아~ 머리가 복잡해지네요 ㅠ
 
 다음글 validation체크를 안했는데 체크를 하네요.. (2)
 이전글 CI에서 linux ipc 통신 지원하나요? (1)

댓글

변종원(웅파) / 2013/03/06 19:10:59 / 추천 0

액티브레코드의 사용순서에 따라 결과가 다르게 나오지 않습니다.

쿼리 찍어보면 아실겁니다.

조건이 잘못 됐거나 조인에도 종류가 많습니다.
 left, right, inner, outer 등

공부해보실 겸 찾아보세요. 매뉴얼에도  있구요

한대승(불의회상) / 2013/03/06 23:59:47 / 추천 0
table의 C에 값이 없으면 other_table 에서 가져오고 싶은건가요?

그렇다면

$this->db->select("if(is_null(table.C), other_table.C, table.C) C", FALSE);
로 하면 됩니다.

단! table.C의 값이 NULL 이라는 가정 했을경우에..