分页的不同方法 - 使用SQLSRV时的LIMIT

时间:2015-09-18 09:08:02

标签: pagination sqlsrv

我正在尝试使用SQLSRV和PHP进行即时分页,我使用MySQL成功完成了此操作,但在使用SQL Server时无法这样做,因为它不支持LIMIT。

我有以下代码在MySQL工作,我想在sqlsrv中应用相同的东西,但由于这是不可能的,我期待创建一个不同的方法(代码)来实现这一点,有人可以给我一个请提出想法或演练来解决这个问题,谢谢先进。

if(isset($_POST['page'])):
$paged=$_POST['page'];
$sql="SELECT * FROM `member` ORDER BY `member`.`member_id` ASC";


if($paged>0){
       $page_limit=$resultsPerPage*($paged-1);
       $pagination_sql=" LIMIT  $page_limit, $resultsPerPage";
       }
else{
$pagination_sql=" FETCH 0 , $resultsPerPage";
}

$result=sqlsrv_query($sql.$pagination_sql);

1 个答案:

答案 0 :(得分:1)

尝试以下代码,希望您觉得有用

$paged = filter_input(INPUT_POST, 'page', FILTER_SANITIZE_NUMBER_INT);

//Initialize these values
$Table = 'your_tbl_name';          //Table name
$IndexColumn = 'pk_col_name';      //Primary key column
$resultsPerPage = '10';            //Page size
$Where = '';                //Optional WHERE clause, may leave empty
$Order = '';                //Optional ORDER clause, may leave empty

$top = ($paged>0) ? $resultsPerPage * ($paged-1) : 0 ;                        
$limit = 'TOP ' . $resultsPerPage ;

$pagination_sql = "SELECT $limit *
    FROM $Table
    $Where ".(($Where=="")?" WHERE ":" AND ")." $IndexColumn NOT IN
    (
        SELECT $IndexColumn FROM
        (
            SELECT TOP $top *
            FROM $Table
            $Where
            $Order
        )
        as [virtTable]
    )
    $Order"; 

$result=sqlsrv_query($conn, $pagination_sql);