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

Posted

技术标签:

【中文标题】Codeigniter 限制和偏移分页不按降序工作【英文标题】:Codeigniter limit and offset pagination not working in descending order 【发布时间】:2021-11-11 10:42:30 【问题描述】:

分页按 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 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

【问题讨论】:

【参考方案1】:

事实证明,当按照 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 个视频。

【讨论】:

以上是关于Codeigniter 限制和偏移分页不按降序工作的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForms ComboBox:AutoComplete 不按降序排序

Codeigniter 分页不呈现分页链接

为啥我在 codeigniter 中的分页不起作用? (404 未找到)

如何在 Codeigniter 分页中使用页码而不是偏移量?

Firebase Javascript:按降序对帖子进行分页

CodeIgniter 3分页不起作用