我正在对模型中的大型数据库进行复杂查询,需要在限制分页结果之前计算总行数。
我的模型如下:
public function get_categoryads($limit, $start, $cid, $type)
{
$this->db->start_cache();
// All your conditions without limit
$this->db->from();
$this->db->where(); // and etc...
$this->db->stop_cache();
$total_rows = $this->db->count_all_results(); // This will get the real total rows
// Limit the rows now so to return per page result
$this->db->limit($per_page, $offset);
$result = $this->db->get();
return array(
'total_rows' => $total_rows,
'result' => $result,
);
}
我不明白现在如何在我的控制器中调用它。 1.将结果传递给视图 2.将total_rows传递给控制器中的分页配置。 如何调用结果数组&我的控制器中的total_rows?
在我的控制器中:
// call the model function to get the result List data if not in an array
$data['results'] = $this->my_model->get_categoryads(10, 0, $cid, $type);
当模型推出阵列时,确实不会工作...... 我应该在控制器中做些什么来获得以下内容:
// call the model function to get the result List data if not in an array
$data['results'] = $this->my_model->get_categoryads(10, 0, $cid, $type);
// Get total results for Pagination Config:
$config['total_rows'] = $this->db->count_all_results();
我做
$config['total_rows'] = $this->db->count_all_results($data['results']);
答案 0 :(得分:2)
你可以在控制器中这样做:
$results = $this->my_model->get_categoryads(10, 0, $cid, $type);
// Array of result rows to be sent to view
$data['results'] = $results['result'];
// For pagination config:
$config['total_rows'] = $results['total_rows'];
答案 1 :(得分:0)
你可以使用codeigniter分页概念: -
您已通过uri段获取页面偏移量,如: -
$page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
//它取决于您的uri细分
现在使用大约页面偏移调用您的模型
$this->my_model->get_results($page,$something);
现在计算总行数: -
$cnt=$this->my_model->count_results($something);
如果第二步和第三步一次完成,那么你必须这样做..
$temp=array();
$temp['result']=your query result;
$temp['count']=your count result;
现在插入以下行进行分页: -
$this->load->library("pagination");
$config = array();
$config["total_rows"] = $cnt; // or $result['count']
$config["per_page"] = 10;
$config['uri_segment'] = 4;
$config['num_links']=2;
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config["base_url"] = your _controller_url
$config["display_pages"]=TRUE;
$this->pagination->initialize($config);
$data["links"] = $this->pagination->create_links();
现在打电话给你的观点: -
$this-> load->view(your_view_name);
在您的视图中,您必须添加div
标记,如:
<div class="pagination">
<?php echo $links;?>
</div>
希望这可以帮到你。
答案 2 :(得分:0)
我认为你可以用更好的代码方式做到这一点。
随着说:
public function get_categoryads($limit, $start, $cid, $type)
{
$this->db->select('COUNT(field) AS `total`')
->from('table');
$totalRows = $this->db->get()->row()->total;
$this->db->select('...')
->from('...')
->where('...')
->limit('...');
$totalRowsAfterLimit = $this->db->get()->num_rows();
$results = $this->db->get()->results();
return array('totalRows' => $totalRows,
'totalRowsAfterLimit' => $totalRowsAfterLimit,
'results' => $results);
}
最后,在您的控制器中,您可以执行以下操作:
list($totalRows, $totalRowsAfterLimit, $results) = $this->my_model->get_categoryads('...');
现在你可以循环搜索结果了。
foreach($results as $result)
{
echo $result->some_field_from_database;
}