제목 | 이럴경우 join문 사용 방법.(수정) | ||
---|---|---|---|
글쓴이 | 수야디벨 | 작성시각 | 2013/03/06 16:41:49 |
|
|||
$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
|
한대승(불의회상)
/
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 이라는 가정 했을경우에.. |
액티브레코드의 사용순서에 따라 결과가 다르게 나오지 않습니다.
쿼리 찍어보면 아실겁니다.
조건이 잘못 됐거나 조인에도 종류가 많습니다.
left, right, inner, outer 등
공부해보실 겸 찾아보세요. 매뉴얼에도 있구요