SQL、PHP在sqlsrv_fetch_数组之前分页时获取总计数

SQL、PHP在sqlsrv_fetch_数组之前分页时获取总计数,php,sql-server,sqlsrv,Php,Sql Server,Sqlsrv,我发现了一个很好的查询,可以在分页时获取总计数: DECLARE @PageSize INT = 15, @PageNum INT = '.$page_num.'; WITH TempResult AS( SELECT * FROM V_Item_Voice ), TempCount AS ( SELECT COUNT(*) AS MaxRows FROM TempResult )

我发现了一个很好的查询,可以在分页时获取总计数:

    DECLARE
        @PageSize INT = 15,
        @PageNum  INT = '.$page_num.';

    WITH TempResult AS(
        SELECT *
        FROM V_Item_Voice
    ), TempCount AS (
        SELECT COUNT(*) AS MaxRows FROM TempResult
    )
    SELECT *
    FROM TempResult, TempCount
    ORDER BY TempResult.ItemNum
        OFFSET (@PageNum-1)*@PageSize ROWS
        FETCH NEXT @PageSize ROWS ONLY
从该查询中,我可以获得一个额外的行
MaxRows
,显示总计数。该表如下所示:

---------------------
id | name  | MaxRows
---------------------
1  | demo2 | 95
---------------------
2  | demo2 | 95
---------------------
然后,为了在PHP中获得它,我执行以下操作:

$result = sqlsrv_query($connection, $query);
while($row = sqlsrv_fetch_array($result)){}

在执行while循环之前,我不知道获得总结果(即
MaxRows
)的好方法是什么。或者我必须把它放在循环里?谁能给我看看。谢谢。

一种可能的方法是生成两个单独的语句,但使用一个
sqlsrv\u query()
调用来执行它们。在这种情况下,第一个结果集将返回行计数,第二个结果集将返回实际数据

使用用于SQL Server的PHP驱动程序,您可以使用
sqlsrv\u next\u result()
轻松地从不同的结果集获取数据。另外,请使用参数进行分页。函数
sqlsrv_query()
同时执行语句准备和语句执行,并可用于执行参数化查询:

示例(基于您的代码):


一种可能的方法是生成两个单独的语句,但使用一个
sqlsrv\u query()
调用来执行它们。在这种情况下,第一个结果集将返回行计数,第二个结果集将返回实际数据

使用用于SQL Server的PHP驱动程序,您可以使用
sqlsrv\u next\u result()
轻松地从不同的结果集获取数据。另外,请使用参数进行分页。函数
sqlsrv_query()
同时执行语句准备和语句执行,并可用于执行参数化查询:

示例(基于您的代码):


假设您至少有一个PK字段:

SELECT colID, col1, col2, ... 1 AS RowCount FROM myTable OFFSET ...
UNION ALL
SELECT NULL, NULL, NULL, ... COUNT(*) AS RowCount FROM myTable
ID/PK列为空的记录是您的总计数,其余的记录是您的页面

或者,如果希望将行计数作为单独的列,可以这样做

SELECT
  SRC.colID, SRC.col1, SRC.col2, ... , RC.RowCount
FROM
  (
    SELECT colID, col1, col2, ... 1 AS RowCount FROM myTable OFFSET ...
  ) AS SRC
  CROSS JOIN
  (
    SELECT COUNT(*) AS RowCount FROM myTable
  ) AS RC

假设您至少有一个PK字段:

SELECT colID, col1, col2, ... 1 AS RowCount FROM myTable OFFSET ...
UNION ALL
SELECT NULL, NULL, NULL, ... COUNT(*) AS RowCount FROM myTable
ID/PK列为空的记录是您的总计数,其余的记录是您的页面

或者,如果希望将行计数作为单独的列,可以这样做

SELECT
  SRC.colID, SRC.col1, SRC.col2, ... , RC.RowCount
FROM
  (
    SELECT colID, col1, col2, ... 1 AS RowCount FROM myTable OFFSET ...
  ) AS SRC
  CROSS JOIN
  (
    SELECT COUNT(*) AS RowCount FROM myTable
  ) AS RC

什么是
db\u com\u fetch\u数组
?似乎您是SQL Server的PHP驱动程序(基于
sqlsrv_query()
call)。@Zhorov抱歉,这只是
sqlsrv_fetch_array
,我的输入类型是什么
db_com_fetch_array
?似乎您是SQL Server的PHP驱动程序(基于
sqlsrv_query()
call)。@Zhorov抱歉,这只是
sqlsrv_fetch_array
,我的打字错误