제목 | 검색 후 페이지네이션에 관련해서 질문입니다. | ||
---|---|---|---|
글쓴이 | 씨아이조 | 작성시각 | 2014/10/30 16:41:20 |
|
|||
CI 책 읽고 혼자서 게시판 만드는 중입니다 다중 조건 검색을 만들고 있는데 검색한 후에 굳이 페이지네이션이 필요없는 갯수에도 전체 글 수를 기준으로 페이지가 생성됩니다 그래서 쿼리를 봤더니 SELECT * FROM toylist ORDER BY toy_no DESC SELECT * FROM toylist WHERE description LIKE "%사운드%" and cartegory=110 and recom_age=5 ORDER BY toy_no DESC LIMIT 0, 5 이런식으로 두개의 쿼리가 생성되어 있었습니다 이것과 페이지네이션이 생성된 것이 관련있을까요? 먼저 작업한 게시판은 검색해보니 밑의 긴 쿼리에서 뒤에 limit부분만 제거된 쿼리가 나와서 제대로 페이지네이션이 작동하던데요 왜 여러가지 조건문 주고나서는 잘 안작동할까요? 밑에 모델부분 소스 남겨봤습니다! 초보에다가 코드 정리도 안해서 조금 더럽더라도 이해해주세요 ㅠㅠㅠ function get_list($table = 'toylist', $type='', $offset='', $limit='', $search_word='',$sfl='', $ctg='', $age=''){ $sword = ''; //검색어가 있을 경우 처리 if($search_word != ''){ switch($sfl) { case "nam": if($ctg != '' && $age != '') { $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" and cartegory='.$ctg.' and recom_age='.$age.' '; } else if($ctg != ''){ $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" and cartegory='.$ctg.' '; } else if($age != ''){ $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" and recom_age='.$age.' '; } else { $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" '; } break; case "con": if($ctg != '' && $age != '') { $sword = ' WHERE description LIKE "%'.$search_word.'%" and cartegory='.$ctg.' and recom_age='.$age.' '; } else if($ctg != ''){ $sword = ' WHERE description LIKE "%'.$search_word.'%" and cartegory='.$ctg.' '; } else if($age != ''){ $sword = ' WHERE description LIKE "%'.$search_word.'%" and recom_age='.$age.' '; } else { $sword = ' WHERE description LIKE "%'.$search_word.'%" '; } break; case "all": if($ctg != '' && $age != '') { $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" or description like "%'.$search_word.'%" and cartegory='.$ctg.' and recom_age='.$age.' '; } else if($ctg != ''){ $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" or description like "%'.$search_word.'%" and cartegory='.$ctg.' '; } else if($age != ''){ $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" or description like "%'.$search_word.'%" and recom_age='.$age.' '; } else { $sword = ' WHERE toy_name LIKE "%'.$search_word.'%" or description like "%'.$search_word.'%" '; } break; } } else if($ctg != '' && $age != '') { $sword = ' WHERE cartegory='.$ctg.' and recom_age='.$age.''; } else if($ctg != ''){ $sword = ' WHERE cartegory='.$ctg.''; } else if($age != ''){ $sword = ' WHERE recom_age='.$age.''; } $limit_query = ''; if ($limit != '' OR $offset != ''){ //페이징이 있을 경우의 처리 $limit_query = " LIMIT ".$offset.", ".$limit; } $sql = "SELECT * FROM ".$table.$sword." ORDER BY toy_no DESC".$limit_query; $query = $this->db->query($sql); if($type == 'count'){ //리스트를 반환하는 것이 아니라 전체 게시물의 개수를 반환 $result = $query->num_rows(); } else { //게시물 리스트 반환 $result = $query->result(); } return $result; } |
|||
다음글 | URL에서 컨트롤러, 메서드를 빼고 싶습니다. (1) | ||
이전글 | urlencode 된 파일 불러오기 질문입니다 (4) | ||
kaido
/
2014/10/30 16:56:51 /
추천
0
|
씨아이조
/
2014/10/30 17:24:24 /
추천
0
kaido님 답변 감사합니다
비록 답은 아니었지만 좋은 것 배워서 갑니다! 제 코드가 한층 더 향상되겠네요!! 그리고 질문 올린들에 대한 자답입니다... 쿼리가 2개인건 모델을 두번 호출해서 이군요 하하 이런 기초적인 것도 몰랐다니 문제가 발생한건 서로 인자값의 갯수가 달라서 였습니다 두군데 인자갑 모두 동일하게 처리해주니 해결되었습니다! |
일단 조언을 몇개 해 드리겠습니다.
limit가 붙는 <span 0,="" 0);="" font-family:consolas,monaco,bitstream="" vera="" sans="" mono,courier="" new,courier,monospace"="">get_list 함수는 그대로 사용 하시고
limit 가 안붙는 totol_list는 따로 함수를 빼서 불러오시는것이 더 보기에도 사용하기에도 좋습니다.
굳이 페이지네이션이 사용되고 안되고를 분리를 하실거면 모델에서 분리를 하기 보다는
컨트롤러에서 조건을 넣으시는게 더 편리 하실 것입니다.
그리고 테스트를 안해봐서 모르겠습니다만 if 조건문이 정말 원하는 대로 나오는지 하나씩 테스트 해보셔야 될것 같습니다.
not 연산자와 else 이 만나면 생각지 못한 골룸한 조건이 되는 경우가 있습니다.
아참 그리고 get이나 세그먼트 방식이시면 검색어의 urlencode 확인도 해보셔야 합니다.