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
,我的打字错误