【问题标题】:PHP MSSQL Query Error for Pagination分页的PHP MSSQL查询错误
【发布时间】:2013-06-13 16:06:07
【问题描述】:

我一直在尝试让分页查询适用于 MSSQL。我已经测试了连接,如果我只运行全选,它运行良好。所以没有连接问题。

 $result = mssql_query("SELECT * FROM DriverAppInfo ORDER BY appdate") 

以下是我的代码。我希望返回前 20 条记录,然后能够增加 $startrow 并让下一页显示这些结果。我已经能够让它为 MYSQL 工作,但是转换为 MSSQL 并且没有 LIMIT 函数让我陷入了循环。

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");

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

【问题讨论】:

  • select top 0 没有多大意义……
  • @Marc B select top 0 应该什么都不选,那么您将获得前 20 条记录作为您的第一页。下一页 $startrow 将增加 20 并且您将 SELECT TOP 20 不在选定的 20 中。因此您将获得记录 21-40

标签: php sql sql-server pagination


【解决方案1】:

在 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

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 2023-03-27
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多