Esh*_*Esh 0 database sql-server pagination jqgrid
我正在研究一个目前包含2500行的表,将来会越来越多.
我使用jqgrid来显示数据库中的记录.
每当网格加载时,我都在top 500从数据库中检索行.但是当我开始在网格中使用分页时,记录的数量正在增加.
示例:首先是行数TOP 100,然后进入下一页,它TOP 200在查询中增加到等等.
现在我想要一个解决方案来避免这个问题,这样我就可以限制行而不是根据网格检索前n行.假设使用范围或LIMIT
例
当我导航到网格中的下一页时,而不是TOP 200行,我想从101到200获取行
select top 500
exe.id,
bat.BName,
bat.tid,
bat.freq,
exe.status,
exe.Msg,
exe.time,
exe.Fi
from
XXX exe,
YYY bat
where
exe.id=bat.id
order by
CONVERT(VARCHAR(10),
exe.time,
120) DESC,
exe.status,
exe.id DESC
Run Code Online (Sandbox Code Playgroud)
请指导我,因为我是jQGrid的新手并且不太了解如何处理这个与DB相关的东西
我还在Stackoverflow中引用了一些链接但无法理解
提前致谢
您可以使用ROW_NUMBER(),在row_number()查询数据之前不会分配,因此如果要按row_number()值检索数据,则需要使用CTE或子选择来获取在WHERE子句中使用的值.
SELECT *
FROM
(
select exe.id,
bat.BName,
bat.tid,
bat.freq,
exe.status,
exe.Msg,
exe.time,
exe.Fi,
row_number() over(order by CONVERT(VARCHAR(10), exe.time, 120) DESC,
exe.status, exe.id DESC) rn
from XXX exe,
YYY bat
where exe.id=bat.id
) x
WHERE rn between 101 and 200
Run Code Online (Sandbox Code Playgroud)
我还建议您更改JOIN语法以使用ANSI语法:
SELECT *
FROM
(
select exe.id,
bat.BName,
bat.tid,
bat.freq,
exe.status,
exe.Msg,
exe.time,
exe.File,
row_number() over(order by CONVERT(VARCHAR(10), exe.time, 120) DESC,
exe.status, exe.id DESC) rn
from XXXexe
INNER JOIN YYY bat
ON exe.id=bat.id
) x
WHERE rn between 101 and 200
Run Code Online (Sandbox Code Playgroud)