CI 묻고 답하기

제목 stored procedure를 CI상에서 call해서 자료를 페이징 하려하는데 한페이지에 다 나옵니다. 어떻게 구성해야 될까요?
카테고리 CI 2, 3
글쓴이 하늘을 바라보며 작성시각 2019/09/26 10:41:22
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 17841   RSS

* 일반 쿼리문에 $limit, $offset 을 넣듯이 stored procedure 안에  $limit, $offset을 넣어서 페이징을 처리하고 싶습니다.

 

---- class Board extends CI_Controller ----------

     $this->load->library('pagination'); 

      $config['first_url'] = site_url() . '/board/index/page/1?'.http_build_query($_GET);

      $config['base_url']=site_url() . '/board/index/page';

      $config['total_rows']=$this->board_m->getBoards('num_rows', '', '', $idx, $send_phon, $recv_phon, $title_1, $send_how,

      $recv_how, $send_date, $send_date1,  $send_date2, $recv_date, $speck_wait_time, $speck_time, $p_value, $send, $recv);

      $config['per_page'] = 10;

      $config['suffix'] = '?'.http_build_query($_GET,'',"&");

      $config['suffix']='?'.http_build_query($_GET,'',"&");

중간생략..

 $this->pagination->initialize($config);

 $data['pagination']=$this->pagination->create_links();        $data['num_rows']=$config['total_rows'];

 $page = $this->uri->segment(4, 1);

  if ($page > 1) {

            $offset=(($page / $config['per_page'])) * $config['per_page'];

        } else {

            $offset=($page - 1) * $config['per_page'];

        }        

        $data['list']=$this->board_m->getBoards('', $offset, $config['per_page'], $idx , $send_phon, $recv_phon, $title_1, $send_how, $recv_how, $send_date,  $send_date1, $send_date2,  $recv_date, $speck_wait_time, $speck_time, $p_value, $send, $recv, $field, $sort);

생략..

 

---------------- class Board_m extends CI_Model ---------------

function getBoards($kind='', $offset='', $limit='', $idx='', $send_phon='', $recv_phon='', $title_1='', $send_how='', $recv_how='', $send_date='', $send_date1='', $send_date2='', $recv_date='', $speck_wait_time, $speck_time, $p_value, $send, $recv, $field='', $sort='') {        //mysql에서 limit는 가져오는 row의 개수, offset은 몇번째 row 부터 가져올지를 결정

     if (!isset($field)){

         $this->db->order_by($field, $sort); 

      } else {

            $this->db->order_by($field, $sort);

     }

 

$query = $this->db->query("CALL select_intphon_sr($send_date1, $send_date2)"); 

$this->db->close();

if ($kind == 'num_rows') {

            $result=$query->num_rows();

 } else {

            $this->db->limit($limit, $offset);

           $result=$query->result(); 

 }

 return $result;

}

 

첨부파일 출력화면.png (59.2 KB)
프로시져내전달값.png (44.3 KB)
 다음글 [게시판]Controller 페이지에서 값 두개 넘기는... (4)
 이전글 Composer + CodeIgniter 구조가 이게 ... (2)

댓글

변종원(웅파) / 2019/09/27 09:55:01 / 추천 0
프로시저 수정하시고 프로시저 파라미터에 $offset, $limit 추가하민 되는데요?
하늘을 바라보며 / 2019/09/27 11:15:43 / 추천 0

감사합니다. 파라미터 넣는부분은 이해가 가는데요.

프로시져내에서 받을때 어떻게 구성해야 하나요?

숫자로 고정 시키면됩니다. limit 10

그런데 저는 위에서 만든 $offset, $limit을 받아서 처리하고 싶습니다.

 

프로시져내용 

-- 중생략

            end
            
   and  a.send_date BETWEEN in_start_dt AND in_end_dt
   and a.send_phon >= 8000000

) a
order by a.idx  ? ?

 

 

변종원(웅파) / 2019/09/27 11:54:28 / 추천 0

쿼리는 http://sang12.co.kr/36 참고하세요.

ci 질문이 아니고 결론적으로 mysql limit 질문이네요. ^^

 

https://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql-sproc

하늘을 바라보며 / 2019/09/27 15:43:46 / 추천 0

정말 감사드립니다. 모두 해결되었습니다.