Codeigniter Paginantion在控制器中获得实际结果总数

时间:2015-11-26 08:40:16

标签: php mysql codeigniter

我正在对模型中的大型数据库进行复杂查询,需要在限制分页结果之前计算总行数。

我的模型如下:

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']);

3 个答案:

答案 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分页概念: -

  1. 您已通过uri段获取页面偏移量,如: -

    $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;         //它取决于您的uri细分

  2. 现在使用大约页面偏移调用您的模型

    $this->my_model->get_results($page,$something);

  3. 现在计算总行数: -

      $cnt=$this->my_model->count_results($something);
    
  4. 如果第二步和第三步一次完成,那么你必须这样做..

          $temp=array();
          $temp['result']=your query result;
          $temp['count']=your count result;
    
    1. 现在插入以下行进行分页: -

      $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();
      
    2. 现在打电话给你的观点: -

          $this-> load->view(your_view_name);
      
    3. 在您的视图中,您必须添加div标记,如:

         <div class="pagination">
             <?php echo $links;?>
         </div>       
      
    4. 希望这可以帮到你。

答案 2 :(得分:0)

我认为你可以用更好的代码方式做到这一点。

  1. 在查询过滤器之前抓取总结果。
  2. 在查询过滤器后抓取总结果。
  3. 在查询过滤器后抓取结果。
  4. 随着说:

    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;
    }