CI 묻고 답하기

제목 MySQL 문자 정렬 문제
글쓴이 좋아서죽음 작성시각 2016/06/01 10:45:07
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 19977   RSS

문제는 해결했지만 더 나은 방법이 있을까 해서 글 올려봅니다.

1. DB에 Chapter가 있어서 Chapter로 정렬을 하던 중에 문제가 발생했습니다.

챕터는 다음 그림처럼 저장이됩니다. 

이런식으로 하면 장절 부분이 먼저 나오고 내용 부분이 정렬되어서 사용하고 있는데

1 -> 10 -> 2 이런식으로 정렬된다는 단점이 있다는 걸 알았습니다.

 

여기서 DB 쿼리를

SELECT * FROM `article` where document_idx = '66' and deletion = 'false' order by chapter_number *1 asc

이렇게 order by 에 *1를 추가해주면 문제가 해결됩니다.

 

그런데 코드 이그나이터에선

$this->db->where( 'document_idx', $documentIndex);        

$this->db->where('deletion', false);            

$this->db->order_by('chapter_number', '*1 ASC');        

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

 

이렇게 하면 system/database/DB_query_builder의 order_by 소스코드에서 *1 ASC 부분이 자동 삭제되게 되어있습니다.

elseif ($direction !== '')      

 {

            $direction = in_array($direction, array('ASC', 'DESC'), TRUE) ? ' '.$direction : '';        

}

 

그래서 전 array에 *1 ASC를 추가해서 문제를 해결했는데 왠지 system을 건딘다는게 썩 맘에 들지는 않네요 ㅎㅎ

코드 이그나이트 문서 전체를 보지 않아서 그러는데 

더 나은 해결법이 있을까요? 

 

 다음글 쿠키 사용시 prefix 접두어 사용시 오류. (2)
 이전글 SQL 질문 (1)

댓글

배강민 / 2016/06/01 12:37:17 / 추천 1

전, 액티브레코드를 사용하지 않아서 잘 모르겠지만,

http://www.ciboard.co.kr/user_guide/kr/database/query_builder.html

Ordering results

이쪽을 보니

$this->db->order_by('title DESC, name ASC');

이렇게 사용할 수도 있다고 써있는거 보니

$this->db->order_by('chapter_number * 1 ASC');  이렇게 써도 되지 않을까싶네요.

 

좋아서죽음 / 2016/06/01 13:01:54 / 추천 0

$this->db->order_by('chapter_number ASC'); 이건 되는데 

$this->db->order_by('chapter_number *1 ASC'); 이건 에러 발생하네요

 

SELECT * FROM `article` WHERE `document_idx` = '66' AND `deletion` =0 ORDER BY `chapter_number` `*1` ASC

내부적으로 쿼리를 이렇게 생성시켜버리네요 

 

 

kaido / 2016/06/01 13:28:14 / 추천 1

$this->db->order_by('chapter_number *1 ASC','',flase); 

통상적으로 액티브 레코드 마지막 인자 값은 밴틱을 감아줄건지 풀어줄건지 체크하는 플래그 값입니다. 값을 넣지 않으면 true 상태로 감아주고, flase 를 넣으면 밴틱을 넣지 않습니다.

좋아서죽음 / 2016/06/01 14:10:09 / 추천 0

오 ㅎㅎ 해결됐습니다 ㅋㅋㅋ 

system을 안건들여도 되네요. 이런게 있는줄 몰랐네요!!

 

이거 메뉴얼에 추가 시켜넣어야겠는데요? 

배강민 / 2016/06/01 14:15:32 / 추천 0

아. 그렇죵. 저도 소소한 쿼리에서만 몇번 엑티브 썼을때 저 문제때문에 뒤져서 false를 박았던 기억이 있네요.

어쨋든 코어를 수정하지 않으셨다니 너무도 잘되었습니당

좋아서죽음 / 2016/06/01 14:47:55 / 추천 0

네 ㅋㅋ 

좋은거 배워가네요 

감사합니다 ㅎㅎ