Codeigniter 限制和偏移分页无法按降序工作

Codeigniter limit and offset pagination not working in descending order

分页在 ASC 顺序下工作正常,但我无法让它在 DESC 顺序下工作。

我的数据库中有 10 个 ID 为 1-10 的测试视频,在第一批中我想获取最后 5 个视频(ID:10、9、8、7、6),在下一批中剩下的 (id:5,4,3,2,1).

问题是我在使用 DESC 顺序时总是得到空结果,这是我的代码:

    $limit = 5;

    $this->db->select('*');
    $this->db->from('participant_videos');
    $this->db->order_by('id','DESC');
    $this->db->limit($limit,$index); // currently index is 10
    $query=$this->db->get();
    
    $videos = $query->result_array(); // empty array
    echo $this->db->last_query();
    // QUERY: SELECT * FROM `participant_videos` ORDER BY `id` DESC LIMIT 10, 5

    return [
        'videos' => $videos,
        'index' => empty($videos) ? 0 : $index - $limit,
    ]; 

第一次这样确定索引:

 public function get_latest_video () {
    
    $video = $this->db->select("*")->limit(1)->order_by('id',"DESC")->get("participant_videos")->row_array();
    
    return !empty($video['id']) ? $video['id'] : null; // index (10)

}

这是我的 table 结构和内容:

== Table structure for table participant_videos

|------
|Column|Type|Null|Default
|------
|//**id**//|int(11)|No|
|participant_id|int(11)|No|
|video_url|varchar(255)|No|
|video_type|varchar(255)|No|video/mp4
== Dumping data for table participant_videos

|2|2|/uploads/2-6138aef5a0717.mp4|video/mp4
|3|3|/uploads/3-6138b09449800.mp4|video/mp4
|4|4|/uploads/4-6138b0c3b1965.mp4|video/mp4
|5|5|/uploads/5-6138b0efa7aa1.mp4|video/mp4
|6|6|/uploads/6-6138b10667680.mp4|video/mp4
|7|7|/uploads/7-6138b154084a4.mp4|video/mp4
|8|8|/uploads/8-6138b1779bee0.mp4|video/mp4
|9|9|/uploads/9-613b4bc1e1d58.mp4|video/mp4
|10|16|/uploads/16-613b57a76c696.mp4|video/mp4

事实证明,当按 DESC 顺序时偏移量“切换”边,因此不要使用最大的 id 作为偏移量:

SELECT * FROM participant_videos ORDER BY id DESC LIMIT 10, 5

我不得不将偏移量更改为 0 以从最大的 id 开始:

SELECT * FROM participant_videos ORDER BY id DESC LIMIT 0, 5

这样我会收到最后 5 个视频。