제목 | 페이지 네이션 궁금한거 다시 올립니다 전체 소스 controllers, models | |||
---|---|---|---|---|
글쓴이 | 일성 | 작성시각 | 2014/08/14 10:36:42 | |
|
||||
class Meat_model extends CI_Model { //생성자 function __construct(){ parent::__construct(); } function get_kind($no){ $query = $this->db->query("SELECT * FROM `recipe` WHERE kind ={$no} ORDER BY no DESC LIMIT 12 ;"); if ($query->num_rows() > 0) { return $query->result_array(); } return FALSE; } function get_lis($no){ $query = $this->db->query("SELECT * FROM `recipe` WHERE kind ={$no} ORDER BY no DESC LIMIT 3;"); if ($query->num_rows() > 0) { return $query->result_array(); } return FALSE; } function gallery($no){ $query = $this->db->query("SELECT * FROM `recipe` WHERE kind ={$no} ORDER BY no DESC LIMIT 9;"); if ($query->num_rows() > 0) { return $query->result_array(); } return FALSE; } function get_item($no) { $query = $this->db->query("SELECT * FROM `recipe` WHERE no={$no};"); if($query) { if ($query->num_rows() > 0) { return $query->row_array(); } } return FALSE;; } function get_list($s, $n) {//$s는 게시판 개수 $n는 가지고오는수 $query = $this->db->query("SELECT * FROM `recipe` ORDER BY no DESC LIMIT {$s}, {$n};"); if($query) {//쿼리분이 정상적으로 들어 간는지 확인 if ($query->num_rows() > 0) {//$query->num_rows(): 쿼리의 계수 return $query->result_array(); } } return FALSE; } function all_count($no) { //$this->db->where('kind', 1); //DB전체 값을 전부 받아온다 //return $this->db->count_all('recipe'); //원하는값을 전체 값을 받아 온다 $query = $this->db->query("SELECT * FROM recipe WHERE kind LIKE {$no} ;"); if($query){ return $query->num_rows(); } return 0; } } controllers class Meat extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->load->library('pagination'); $this->load->model('meat_model',"i_obj",TRUE); } public function index(){ $data['meat'] = $this->i_obj->get_kind(1); $data['ite'] = $this->i_obj->get_lis(1); $data['gallery'] = $this->i_obj->gallery(1); //$this->load->view('meat_view',$data); $this->page(); } public function view(){ if($this->session->userdata('logged_in') == TRUE){ $no = $this->uri->segment(3,0); if($no > 0) { $data['meat_item'] = $this->i_obj->get_item($no); $this->load->view('meat_content_view', $data); } } else{ echo ""; echo ""; redirect(site_url('login'), 'refresh'); } } public function page() { $data['meat'] = $this->i_obj->get_list($this->uri->segment(3,0),12); $data['ite'] = $this->i_obj->get_lis(1); $data['gallery'] = $this->i_obj->gallery(1); //CI에서 제공해주는 페이지 네이션 환경설정 $config['total_rows'] = $this->i_obj->all_count(1); $config['per_page'] = 12; $config['base_url'] = site_url('/meat/page'); $config['full_tag_open'] = '
$config['num_tag_open'] = '
|
||||
다음글 | 쿼리 작성시 질문 입니다. (2) | |||
이전글 | body공백 (1) | |||
letsgolee
/
2014/08/15 11:21:22 /
추천
0
|
function all_count($no) {
//$this->db->where('kind', 1);
//DB전체 값을 전부 받아온다
//return $this->db->count_all('recipe');
//원하는값을 전체 값을 받아 온다
$query = $this->db->query("SELECT * FROM recipe WHERE kind LIKE {$no} ;");
if($query){
return $query->num_rows();
}
return 0;
}
를 보면 다음의 문제점이 있습니다.
단순히 rows count를 가져오는데 모든 데이터 값을 가져오려고 합니다. 만일 데이터 값이 1,000,000,000개의 rows라면 아마 서버가 미쳐버리겠죠??? 단순 count를 가져오려면 쿼리는 이렇게 됩니다:
function all_count($no) {
$sql = "select count(*) as cnt from recipe where kind = ".$this->db->escape($no);
$query = $this->db->query($sql);
if ($query->num_rows() > 0) {
$row = $query->row();
return $row->cnt;
}
return false;
}
그런데 이미 코드이그나이터에서는 위의 방식을 간단히 하는 코드를 제공하고 있습니다.
http://codeigniter-kr.org/user_guide_2.1.0/database/active_record.html
위의 링크에서 count_all_results가 그겁니다. 따라서 위의 코드를 단순하게 작업하면
$this->db->where('kind', $no);
$this->db->from('recipe');
return $this->db->count_all_results();
이렇게 하면 됩니다. 위에서 like를 안쓰고 where를 쓴 것은 kind값이 1만 들어가는 상황인 것 같아 like를 사용하지 않았습니다. 전체적으로 코드이그나이터보다는 mysql 사용법부터 배우시길 권해드립니다.