SQL查询结果与SQL Server 2008中的随机Order by分页

时间:2012-10-25 18:38:36

标签: sql sql-server sql-server-2008

我正在尝试对我网站上的页面实施分页,该页面返回数据库表中的结果。

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

我正在关注本教程:Tutorial

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

我尝试按照这个Question的答案,但我希望结果是随机顺序的,我不能在派生表上做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

2 个答案:

答案 0 :(得分:2)

  1. 将整数列'order'添加到您的表
  2. 编写一个代码,在所有具有唯一随机数的行中填充此列
  3. 不时运行此代码以随机播放行
  4. 按照'order'排序时,像往常一样进行分页
  5. 请记住,如果您在某人分页的中间对行进行随机播放,则相同的行可以显示在不同的页面上。

答案 1 :(得分:1)

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