lihao812 发表于 2009-10-6 10:49:09

分享个自己解决MSSQL 分页的limit 问题

本帖最后由 lihao812 于 2009-10-13 10:02 编辑

坛子查了N编了,郁闷就是找不到怎么解决 MSSQL LINIT的问题.
于是自己改写了limit函数.代码如下:

function _limit($sql, $limit, $offset)
{
$TableWhere = strstr($sql,'FROM ');
if($limit >=$offset){
returnpreg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$offset.' ', $sql.'AND ID>(SELECT MAX(ID) FROM(SELECT TOP '.$limit.' ID '.$TableWhere.') AST )');
}
else{
   return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$offset.' ', $sql);
}
}
不好用拍我砖,我很菜的!

---------------------------------------------------------

修正一下,上面的修改limit是可以暂时解决问题,但是后来发现
$this->db->order_by('ID DESC');

不能用了,几经周折,终于找到方法了.但不支持ASC DESC同时使用. -_-!~~望高手指点!

在mssql_driver.php增加变量

var $RSnum = '0';//这个值是结果总数.分页调用的时候给赋值,

$this->db->RSnum = $config['total_rows'];//记录总数.


function _limit($sql, $limit, $offset)
{
//$i = $limit + $offset;
return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$offset.' ', $sql);
}


在DB_active_rec.php增加了个自定义函数:


//函数功能:处理MSSQL的 limit 参数.
function _mssqlLimitStr($sql){
if($this->dbdriver == 'mssql'){
$TableWhere = strstr($sql,'FROM ');
if($this->ar_limit >= $this->ar_offset){
    $MaxID = $this->ar_limit;
    if(stristr(implode(', ', $this->ar_orderby),'DESC') =='DESC'){
   $Select = '<=';$MaxID = $this->RSnum-$this->ar_limit;
    }
    else if($this->ar_limit == $this->ar_offset)$Select = '>'; else $Select = '>=';
    $Temp=' AND ID'.$Select.'(SELECT MAX(ID) FROM(SELECT TOP '.$MaxID.' ID '.$TableWhere.') AST )';
    return $Temp;
   }
}
}


修改 order_by 处理sql 的地方(大概在1582行):

// Write the "ORDER BY" portion of the query
if (count($this->ar_orderby) > 0)
{
   $sql .= $this->_mssqlLimitStr($sql);
   $sql .= "\\nORDER BY ";
   $sql .= implode(', ', $this->ar_orderby);
   if ($this->ar_order !== FALSE)
   {
    $sql .= ($this->ar_order == 'desc') ? ' DESC' : ' ASC';
   }
}


这样就完美支持 ORDER BY了. 其他的AR功能还没测试.先放出来分享了.

xiaoniao 发表于 2009-10-6 11:36:15

噢 好像很少人用mssql的噢

我想问下 为什么不用mysql要用mssql的呢

lihao812 发表于 2009-10-6 14:17:09

mysql 属于小型数据库,商业用途有点不适用.

ffms_lin 发表于 2009-10-19 11:41:16

看看。。。

mmy83 发表于 2012-2-1 17:19:46

先谢谢了,遇到同样问题
页: [1]
查看完整版本: 分享个自己解决MSSQL 分页的limit 问题