CI 묻고 답하기

제목 [초보]간단한 DB쿼리 어케 해요?
글쓴이 헛발이 작성시각 2012/05/15 16:02:58
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 15103   RSS
이건 어떻게 하나요?

select
    a.name,
    b.name
from
    test1.a,
    test2.b
where
    a.id = b.test1_id and
    a.active = 1 and
    b.active = 1

엑티브레코드를 사용하고 싶은데...

 다음글 Language Class 사용 시 한글 깨짐 현상 (2)
 이전글 자체로 만든 helper가 load되지 않아요 ;ㅂ; (2)

댓글

양승현 / 2012/05/15 16:12:17 / 추천 0
$this->db->select("a.name, b.name");
$this->db->from('test1 a");
$this->db->join("test2 b", "b.test1_id = a.id and b.active = '1'");
$this->db->where("a.active" , "1");
$query = $this->db->get();
$result = $query->result_array();

이런식? 엥~ 답글달고보니 헛발이님이시네.. 낚시글 이신가요? 호곡~
헛발이 / 2012/05/15 16:44:44 / 추천 0
우하하하~ 낚시글은 아니고요

$this->db->join($this->test1.' as B', 'A.id = B.id and A.key = B.key and B.activated=1 and B.date=\'2012-05-01\'', 'left');

이런식으로 조인부분에 마구 걸어 놨더니..
데이터가 2000건이 넘어가니 마구 버벅되서 join형식이 잘못되었나 해서요...
양승현 / 2012/05/15 17:13:52 / 추천 0
음.. 낚시글 아니군요 ㅎㅎ
엑티브레코드보다는 쿼리상에서 미리확인하시는게 나을듯..
다량의 데이터라면 조건절을 만족한 a,b를 구하시고 조인을 하시는게 맞을듯해요.
$this->db->from('(select * from test where a.active='1') a");
또 LEFT가 아닌 기본으로 ..
where와 join의 시점을 생각해보셔야 할듯..

엄청난 데이터량이라면 디비딴에서 뷰를 만들어 쓰셔도..ㅎㅎ
헛발이 / 2012/05/15 17:33:52 / 추천 0
그러면  Left조인시에 조건절을 두세개로 하면  따따따불로 검색을 하게 되는건가요?
음...
변종원(웅파) / 2012/05/15 18:58:07 / 추천 0
join 구문에서 하나씩 빼보면 어디서 부하가 걸리는지 나옵니다.
그 부분을 마이그레이션 하면 됩니다.
헛발이 / 2012/05/16 08:26:42 / 추천 0
ㅋㅋ join문을 하나씩 빼보면 결과가 안나오는데요 ㅋㅋ
휴~ 다시 한번 찾아 보겠습니다..
한대승(불의회상) / 2012/05/16 13:24:31 / 추천 0
mysql 을 사용 하신다면

explain 

문을 사용하여 어느부분에서 부하가 걸리는지 얼추 확인 가능 합니다.

explain select * from member

헛발이 / 2012/05/16 15:29:14 / 추천 0
앗 초보한데 필요한 좋은 정보감사합니다..
무가당 / 2012/05/17 12:46:39 / 추천 0
select
    a.name,
    b.name
from
    test1.a,
    test2.b
where
    a.id = b.test1_id and
    a.active = 1 and
    b.active = 1

이것을 ANSI SQL 구문으로 바꿔보면

select 
    a.name,
    b.name
from
    test1.a inner join test2.b
on
    a.id = b.test1_id
where
    a.active = 1 and
    b.active = 1

이렇게 됩니다.

덧글을 보니 left join을 사용하셨는데 본문 Query 기준으로 inner join을 사용하였습니다.

ANSI SQL구문에서 처럼 Join에서는 Table간에 Join 되어야 할 Column만 on절에 두고

Where절에서는 Join된 결과에서 검색해야할 조건만 두는 것이 좋습니다.

그리고 ANSI SQL구문을 추천드리는 이유는 일단 대부분의 DBMS가 지원하는 표준이고

Join절의 조건과 Where절의 조건을 구분하여서 가독성을 높일 수 있습니다.