分页博客SQL查询

时间:2011-10-13 10:42:31

标签: sql sql-server vb.net

我有一个用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的帖子?

4 个答案:

答案 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