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 个视频。
分页在 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 BYid
DESC LIMIT 10, 5
我不得不将偏移量更改为 0 以从最大的 id 开始:
SELECT * FROM
participant_videos
ORDER BYid
DESC LIMIT 0, 5
这样我会收到最后 5 个视频。