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 BYid
DESC LIMIT 10, 5
我必须将我的偏移量更改为 0 以从最大的 id 开始:
SELECT * FROM
participant_videos
ORDER BYid
DESC LIMIT 0, 5
这样我可以接收最后 5 个视频。
【讨论】:
以上是关于Codeigniter 限制和偏移分页不按降序工作的主要内容,如果未能解决你的问题,请参考以下文章
C# WinForms ComboBox:AutoComplete 不按降序排序
为啥我在 codeigniter 中的分页不起作用? (404 未找到)
如何在 Codeigniter 分页中使用页码而不是偏移量?