0

我正在尝试在我的网站上实现从数据库表返回结果的页面的分页。

目前,它以随机顺序返回所有行。但是,随着我的数据库不断增长,我想对这些结果进行分页,而不是在一页上显示它们。但是,我不想仅仅为了显示 20 条记录而返回所有结果。根据页面的不同,我只想从数据库中获取 20 条相关记录。

我正在学习本教程:教程

但是,我不能使用带有OFFSET子句的查询,因为托管使用 SQL SERVER 2008。(我相信它是在 2012 年推出的)。

我尝试按照这个问题的答案,但我希望结果是随机顺序的,我不能ORDER BY在派生表上做一个......所以我有点卡住了想法!

有什么帮助吗?谢谢!

这是我目前拥有的:

    SELECT Title, Filename, PhotoURL, Orientation, FolderName, SetURL, RowNum
      FROM (
            SELECT  p.Title, p.Filename, p.URL AS PhotoURL, p.Orientation, s.FolderName, s.URL AS SetURL, ROW_NUMBER() OVER (ORDER BY p.PhotoID) AS RowNum
          FROM  Photos p
                LEFT OUTER JOIN SetPhotos sp
                    ON sp.PhotoID = p.PhotoID
                LEFT OUTER JOIN [Sets] s
                    ON s.SetID = sp.SetID
         WHERE  p.Hide = 0
      ORDER BY  NEWID()
        ) AS PaginatedPhotos
 WHERE  PaginatedPhotos.RowNum BETWEEN 0 AND 10
4

2 回答 2

2
  1. 将整数列“订单”添加到您的表中
  2. 编写一个代码,用唯一的随机数填充所有行中的该列
  3. 不时运行此代码以打乱您的行
  4. 按“顺序”排序时照常进行分页

请记住,如果您在某人分页的中间随机排列行,则相同的行可能会出现在不同的页面上。

于 2012-10-25T19:18:42.767 回答
1

只需选择TOP(pagesize). 由于您的订单是随机的,因此请求 page=2 不会导致显示第 1 页的原始结果的第 2 页。换句话说,当订单是随机的并且每次都更改时,第 1 页对于任何请求的页面始终是正确的。

于 2012-10-25T18:52:56.503 回答