我已经在codeigniter中实现了分页。但结果并不是预期的。我有 5 个条目.1,2,3,4,5。 这是我的控制器
$this->data['models_num']=$this->model_models->getModels_ImageData();
$model=$this->data['models_num'];
$row=count($model);
$this->data['brands']=$this->model_brands->getBrandsData();
$config['base_url'] = base_url('services/NewCar');
$config['total_rows'] = $row;
$config['per_page'] = 4;
$config["uri_segment"] = 3;
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], $page);
$config['num_links'] = $row;
$config['use_page_numbers'] = TRUE;
$this->pagination->initialize($config);
我的模型是:
$sql = "SELECT * FROM models LIMIT $limit OFFSET $start";
问题是 当我尝试第一页时,它显示了 4 个整体。那好吧,但是我 clcxik 第二页它显示了 3 个 enties。两行重复。第一页 1、2、3、4 个条目被变音。在第二页中,3,4,5是ipaly。请帮忙。请
在这些情况下,最好输入一些数字并可视化正在发生的事情......
所以拿你的sql语句
$sql = "SELECT * FROM models LIMIT $limit OFFSET $start";
$limit将是您要检索的项目数。$start是它将开始从中获取它们的地方。
当$page为 0 时,即第一次没有给出数字 $start将为 0。所以你会得到 1,2,3,4
当 $page = 2 时, $start将是 2,所以你会得到 3,4,5,因为偏移量现在是 2。即它从数据库中的第 3 个位置开始读取。
您所期望的是第 2 页应该从第 5 个元素开始,因此它应该给出 5,6,7,8。
这里的问题是您的偏移量不正确。它必须是页码 * 条目数。
快速解决方法是将现有代码从...
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], $page);
自
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 1;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], ($page -1) * $config["per_page"]);
这些变化是
- 将网址细分受众群的默认值设置为 1
- 将$start(偏移(的值更改为
($page -1) * $config["per_page"]
因此,当没有页面时,$page将是 1(当它实际上是第 1 页时相同(。
Offset
Page ($page - 1 ) * $config["per_page"] Entries
1 (1 - 1) * 4 = 0 1,2,3,4
2 (2 - 1) * 4 = 4 5,6,7,8
3 (3 - 1) * 4 = 8 9,10,11,12
4 (4 - 1) * 4 = 12 13,14,15,16
等等...