我有一个用vb.net编写的博客(非wordpress或其他任何东西)。目前我只是通过引入最后10个结果来提取数据:
SELECT TOP (@bAmount) bCategory, bID, bImageURL, bInactive, bLargeImage, bPost, bPostDate, bPostTitle, bPoster, bStyle FROM Blog ORDER BY bID DESC
我只是要通过后退和前进按钮来浏览帖子,但是如何使用SQL来发帖10-20帖子,而不是帖子之间的ID。 (这些ID很多,但可以大幅跳跃)。
所以基本上当我点击它时,它给了我10个比第一页结果早10的帖子?
答案 0 :(得分:1)
您可以使用以下内容:
DECLARE @rowsPerPage int SET @rowsPerPage = 10
DECLARE @pageNum int SET @pageNum = 3;
With SQLPaging
As
(
Select
Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY bID) as resultNum,
bCategory,
bID,
bImageURL,
bInactive,
bLargeImage,
bPost,
bPostDate,
bPostTitle,
bPoster,
bStyle
FROM Blog
)
select * from SQLPaging where resultNum > ((@pageNum - 1) * @rowsPerPage)
此代码现在可以正常工作,但我无法针对架构进行测试......
答案 1 :(得分:0)
当您获得大量数据时,请存储最大和最小的bID
。然后使用:
SELECT TOP (@bAmount)
bCategory, bID
, bImageURL, bInactive
, bLargeImage, bPost
, bPostDate, bPostTitle
, bPoster, bStyle
FROM Blog
WHERE bID < @PreviousMin_bID
ORDER BY bID DESC
或:
SELECT *
FROM
( SELECT TOP (@bAmount)
bCategory, bID
, bImageURL, bInactive
, bLargeImage, bPost
, bPostDate, bPostTitle
, bPoster, bStyle
FROM Blog
WHERE bID > @PreviousMax_bID
ORDER BY bID ASC
) tmp
ORDER BY bID DESC
答案 2 :(得分:0)
我想,有些LIMIT
会帮助你。通常,您可以使用LIMIT
传递两个参数 - 结果中的起始偏移量和最大行数。因此,您只需要计算页面的偏移量。
抱歉,如果我错了。这只是MySQL中分页的常用方法。我不知道MSSQL。
答案 3 :(得分:0)
新的SQL Server版本具有Offset和Fetch Next关键字,以便在数据库站点上提供分页。这是一篇包含sql sample SQL Paging in SQL Server 2012 using SQL ORDER BY OFFSET and FETCH NEXT
的好文章declare @currentPage int = 2
declare @rowsPerPage int = 10
select
bCategory, bID, bImageURL, bInactive, bLargeImage, bPost, bPostDate, bPostTitle, bPoster, bStyle
from Blog
ORDER BY bID DESC
OFFSET (@currentPage-1)*@rowsPerPage ROWS
FETCH NEXT @rowsPerPage ROWS ONLY