分页的PHP MSSQL查询错误

分页的PHP MSSQL查询错误,php,sql,sql-server,pagination,Php,Sql,Sql Server,Pagination,我一直在尝试让分页查询为MSSQL工作。我已经测试了连接,如果我只是运行一个selectall,它就可以正常运行。因此不存在连接问题 $result = mssql_query("SELECT * FROM DriverAppInfo ORDER BY appdate") 下面是我的代码。我希望返回前20条记录,然后能够增加$startrow,并在下一页显示这些结果。我已经能够在MYSQL上实现这一点,但是转换到MSSQL并且没有限制函数让我陷入了困境 if (!isset($_GET['

我一直在尝试让分页查询为MSSQL工作。我已经测试了连接,如果我只是运行一个selectall,它就可以正常运行。因此不存在连接问题

 $result = mssql_query("SELECT * FROM DriverAppInfo ORDER BY appdate") 
下面是我的代码。我希望返回前20条记录,然后能够增加$startrow,并在下一页显示这些结果。我已经能够在MYSQL上实现这一点,但是转换到MSSQL并且没有限制函数让我陷入了困境

if (!isset($_GET['startrow']) or !is_numeric($_GET['startrow'])) {
$startrow = 0;
} else {
  $startrow = (int)$_GET['startrow'];
}



 $result = mssql_query("SELECT TOP 20 FROM DriverAppInfo WHERE appdate NOT IN 
                     (SELECT TOP $startrow FROM DriverAppInfo ORDER BY appdate ASC )
              ORDER BY appdate ASC") 

                or die("Couldn't connect to SQL Server Table on $myDB");

然后在连接到表时出错。所以我的查询语法有问题。如果您有任何帮助,我们将不胜感激。

在SQL Server中,
row_number()
提供了一种简单的分页方法:

select  *
from    (
        select  row_number() over (order by appdate) rn
        ,       *
        from    DriverAppInfo
        ) as SubQueryAlias
where   rn between 21 and 40 -- Second page
如果您有SQL Server 2012,则可以使用
offset

select  *
from    DriverAppInfo
order by
        appdate
offset 20 rows
fetch next 20 rows only

选择top 0
没有多大意义…@Marc B选择top 0时不应选择任何内容,那么您将获得前20条记录作为第一页。下一页$startrow将增加20,您将选择TOP 20而不是所选的20。所以你会得到21-40的记录