제목 | MySQL 문자 정렬 문제 | ||
---|---|---|---|
글쓴이 | 좋아서죽음 | 작성시각 | 2016/06/01 10:45:07 |
|
|||
문제는 해결했지만 더 나은 방법이 있을까 해서 글 올려봅니다. 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
|
좋아서죽음
/
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
네 ㅋㅋ 좋은거 배워가네요 감사합니다 ㅎㅎ |
전, 액티브레코드를 사용하지 않아서 잘 모르겠지만,
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'); 이렇게 써도 되지 않을까싶네요.