Codeignitor 具有特定有限数据随机的分页

问题描述 投票:0回答:1

我有一个可悲的问题。我无法应对这种情况。请帮忙。 我想从按类别指定的大量数据中检索随机有限的数据。 通常我可以从下面的代码中检索该数据。 但是当我尝试对这些数据进行分页时出现了问题。

虽然我首先限制了 [$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;
    }
php codeigniter
1个回答
0
投票

如果你想使用 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);
© www.soinside.com 2019 - 2024. All rights reserved.