分页后为啥没办法LIMIT?附图+原始码
本帖最后由 Loading... 于 2013-5-11 12:50 编辑先说明一下我的问题,我在第一个分页取得是2笔资料正确,但是为啥到了第二页就不受限制了?如下图
使用 sqlsrv 驱动 mssql
我的控制器
$this->load->model('coil_model');
$this->load->library('pagination');
$config['base_url'] = base_url('rod/index');
$config['total_rows'] = $this->coil_model->record_count();
$config['per_page'] = 2;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data['coil']=$this->coil_model->fetch_data($config["per_page"], $page);
$data['links'] = $this->pagination->create_links();
$this->load->view('rod/index',$data);
模型
function record_count($condition=NULL){
if($condition>0){
$this->db->where($condition);
}
$query = $this->db->get('view_COIL8MM');
return count($query->result());
}
function fetch_data($limit,$start,$condition=NULL){
if($condition>0){
$this->db->where($condition);
}
$this->db->order_by('id','desc');
$this->db->limit($limit, $start);
$query = $this->db->get("view_COIL8MM");
if($query->num_rows() > 0){
return $query->result();
}else{
return NULL;
}
}
解决方法,修改了sqlsrv这个驱动的 function _limit,
function _limit($sql, $limit, $offset)
{
$str=strtolower(str_replace("\n",' ',$sql));
$strtemp=substr($str,strpos(strtolower($str),'from ')+5);
$tablename=substr($strtemp,0,stripos($strtemp,' '));
$orderby=substr($str,strpos(strtolower($str),'order by ')+9);
$sql = "
SELECT *
FROM
( SELECT *, ROW_NUMBER() OVER (ORDER BY $orderby) as NroFila
FROM$tablename
) AS PAG_TABLEXXX
WHERE
NroFila BETWEEN ".($offset?$offset+1:1)." AND ".($offset+$limit)."
";
return $sql;
} 本帖最后由 kuailewang 于 2013-5-11 13:02 编辑
Loading... 发表于 2013-5-11 12:53 static/image/common/back.gif
解决方法,修改了sqlsrv这个驱动的 function _limit,
这个修改了ci核心,不好
还是看手册的好
$this->db->limit();
限制查询所返回的结果数量:
$this->db->limit(10);
// 生成: LIMIT 10
第二个参数设置的是结果偏移量。
$this->db->limit(10, 20);
// 生成: LIMIT 20, 10 (仅限MySQL中。其它数据库有稍微不同的语法)
第二和第三个参数允许你设置一个结果集每页纪录数(limit)和结果集的偏移(offset)
$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
注意:第二参数是每页纪录数,第三个参数是偏移
//---------------------------------------------------------------------------------------------------------------------------
//当:
$config['use_page_numbers'] = TRUE;
//后,你就要考虑limit,offset了 本帖最后由 Loading... 于 2013-5-11 13:18 编辑
kuailewang 发表于 2013-5-11 12:55 static/image/common/back.gif
这个修改了ci核心,不好
还是看手册的好
$this->db->limit();
我现在使用的是mssql 才有这个问题,语法部分肯定没问题,因为我倒着用也是错的...
limit(2,5) 我取得7笔资料
limit(5,2) 我也是取得7笔资料,如一楼图所示,
图一 limit(2,0),
图二 limit(2,2)
之前我用mysql,同样的分页技巧,就没问题...所以跟文档没多大关系
不知道有没有其他避免修改核心代码的方式 Loading... 发表于 2013-5-11 12:53 static/image/common/back.gif
解决方法,修改了sqlsrv这个驱动的 function _limit,
支持,mssql我也这么用的。
我能说我的SQL SERVER2000,不支持ROW_NUMBER()么。:Q
正想办法弄分页呢
页:
[1]