我已经在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个整体。那好吧,但是我在第二页中显示了3个实体。这两行是重复的。第一页1,2,3,4条目被显示。在第二页的3、4、5中,请帮助。Pleaseee
答案 0 :(得分:0)
在这些情况下,最好输入一些数字并可视化正在发生的事情...
因此,使用您的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个位置开始读取。
您期望的是第二页应该从第五个元素开始,所以它应该为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"]);
更改为
($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
以此类推...