我有一个可悲的问题。我无法应对这种情况。请帮忙。 我想从按类别指定的大量数据中检索随机有限的数据。 通常我可以从下面的代码中检索该数据。 但是当我尝试对这些数据进行分页时出现了问题。
虽然我首先限制了 [$this->db->limit(6)] 所以在分页编码中我无法使用 [($limit, $start)] 参数。
另一个问题是当我进入下一页时,会随机出现新数据。
我的观点如下: 1.如何解决限制问题。 2.如果我更改页面,则会(随机)出现新数据。 这意味着每次数据更改时。 3. 我想从数据库中检索一次数据,然后对这些数据进行分页,直到重新加载页面。 我想使用ajax但不能。
May also share if any tutorial or example.
以下代码:
//below is controller code:
public function post_data()
{
$this->load->library('pagination');
$config['total_rows'] = $this->post_model->post_rows();//specific limited rows will retrieve
$config['per_page'] = 6;
$config['num_links'] = 2;
$config['attributes'] = array('class' => 'page-link' );
if ($this->input->get('page')) {
$sgm = (int) trim($this->input->get('page'));
$start = $config['per_page'] * ($sgm - 1);
} else {
$start = 0;
}
$this->pagination->initialize($config);
$data['post_data'] = $this->post_model->post($config['per_page'], $start);
$data['main_content'] = 'post_view';
$this->load->view('include/template', $data);
}
//below is model code:
// to count row for pagination
public function post_rows()
{
$this->db->select('id , post_title, post_desc, aut_name, date');
$this->db->from('tbl_post');
$this->db->where_in('cat_id', 1);
$this->db->order_by('cat_id' , 'RANDOM');
$this->db->limit(6);//limit can be change
$query1 = $this->db->get();
$query1 = $query1->num_rows();
$this->db->select('id , post_title, post_desc, aut_name, date');
$this->db->from('tbl_post');
$this->db->where_in('cat_id', 1);
$this->db->order_by('cat_id' , 'RANDOM');
$this->db->limit(6);//limit can be change
$query2 = $this->db->get();
$query2 = $query2->num_rows();
$query = $query1 + $query2;
return $query;
}
public function post($limit, $start)
{
$this->db->select('id , post_title, post_desc, aut_name, date');
$this->db->from('tbl_post');
$this->db->where_in('cat_id', 1);
$this->db->order_by('cat_id' , 'RANDOM');
$this->db->limit(6);
$query1 = $this->db->get();
$query1 = $query1->result_array();
$this->db->select('id , post_title, post_desc, aut_name, date');
$this->db->from('tbl_post');
$this->db->where_in('cat_id', 1);
$this->db->order_by('cat_id' , 'RANDOM');
$this->db->limit(6);
$query2 = $this->db->get();
$query2 = $query2->result_array();
//My question is : here how can I use $limit & $start ?
$query = array_merge($array1 , $array2);
return $query;
}
如果你想使用 order by rand(),你需要从随机查询中生成视图,然后使用视图数据来创建分页 (如果您拥有大量用户和数据集,则不适用)。
您可以创建随机种子(可以保存在会话中),通过使用哈希算法(md5、sha256 等)和主键(或其他唯一字段)创建其他字段,并使用种子字段对字段进行排序。 每次您想要重新洗牌列表时,您都可以重置随机种子(在这种情况下,您可以在每次刷新页面时更改种子)。
//save seed in session
$seed = rand(0,99999);
$this->db->select('id , post_title, post_desc, aut_name, date, md5(id+seed) as seeds');
$this->db->from('tbl_post');
$this->db->where_in('cat_id', 1);
$this->db->order_by('seeds');
$this->db->limit($start,$limit);