문제는 해결했지만 더 나은 방법이 있을까 해서 글 올려봅니다.
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을 건딘다는게 썩 맘에 들지는 않네요 ㅎㅎ
코드 이그나이트 문서 전체를 보지 않아서 그러는데
더 나은 해결법이 있을까요?
$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
내부적으로 쿼리를 이렇게 생성시켜버리네요
$this->db->order_by('chapter_number *1 ASC','',flase);
통상적으로 액티브 레코드 마지막 인자 값은 밴틱을 감아줄건지 풀어줄건지 체크하는 플래그 값입니다. 값을 넣지 않으면 true 상태로 감아주고, flase 를 넣으면 밴틱을 넣지 않습니다.
오 ㅎㅎ 해결됐습니다 ㅋㅋㅋ
system을 안건들여도 되네요. 이런게 있는줄 몰랐네요!!
이거 메뉴얼에 추가 시켜넣어야겠는데요?
아. 그렇죵. 저도 소소한 쿼리에서만 몇번 엑티브 썼을때 저 문제때문에 뒤져서 false를 박았던 기억이 있네요.
어쨋든 코어를 수정하지 않으셨다니 너무도 잘되었습니당
네 ㅋㅋ
좋은거 배워가네요
감사합니다 ㅎㅎ
전, 액티브레코드를 사용하지 않아서 잘 모르겠지만,
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'); 이렇게 써도 되지 않을까싶네요.