CI 묻고 답하기

제목 mysql 액티브레코드관련 질문입니다.
글쓴이 돼지바뿅뿅 작성시각 2015/09/09 16:58:36
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 14685   RSS
안녕하세요. 날씨가 많이 선선해졌네요. 다들 감기조심하시구요

질문입니다.

A라는 테이블과 B라는테이블이있습니다.

A테이블의 1칼럼이 B테이블의 3칼럼과 묶여있는데,

B테이블의 2칼럼의 조건을 검색하여 3칼럼을 찾고,
A테이블의 1칼럼과 B테이블의 3칼럼을 비교하여, 리스트를 뽑고싶습니다.

제가 짠 쿼리는

우선 B테이블의 3칼럼을찾습니다.
$B_result = $this->lib->test('값'); 으로 넘겨 3칼럼의 값을 두개를받았습니다.

받은값을  $값 = (값1, 값2)로 설정 후

A테이블의 조건을 걸었습니다
$this->db->select(*, flase);
$this->db->where('1 IN ', $값, false);

여기서 부터 문제입니다 ㅜ
결과값을 받고
$A_result['total'] = $this->db->get(A)->num_rows();

orderby를 걸어줍니다
$this->db->order_by('1', 'DESC');

$A_result['query'] = $this->db->get(A);

$A_result['query']->num_row()가 있으면 $A_result를 return;

여기까진데요..

출력되는 쿼리를 찍어보면

order by 걸기 전
select * from A where 1 In (값1,값2);

order by 걸은 후
select * from order by 1 DESC;

쿼리가 바뀌어 버립니다..

A테이블에 있는 칼럼을 조건으로 검색했을시 변화없이 처음 쿼리에 order by가 걸려 원하는 결과 값이나오는데
B테이블을 걸고 하면 쿼리가바뀝니다.ㅜㅜ

보기 어려우실테니 종합해서 쿼리올립니다.
고수님들 도와주세요 ㅜ

$this->db->start_cache();

$B_result = $this->lib->test('값');

$b_cnt = count($B_result);
for($i=0; $i<$b_cnt; $i++)
{
    $where .= $B_result[$i]['3'];
    
    if($i != $b_cnt-1)
      $where .= ",";
}

$this->db->where('1 IN ', '('.$where.')', false);
$this->db->select('*', false);

$this->db->stop_cache();

$A_result['total'] = $this->db->get(A)->num_rows();
$this->db->order_by('1', 'DESC');

$A_result['query'] = $this->db->get(A);

$this->db->flush_cache();
 다음글 초보 질문이 있습니다. rest풀 방식의 유알엘 성격(... (5)
 이전글 CI3.0-dev 에서 세션처리 에러 (HMAC) (1)

댓글

한대승(불의회상) / 2015/09/09 17:25:09 / 추천 0
쿼리 cache 버그 일 수 있습니다.
쿼리 cache 걷어내고 테스트 해보세요.