繁体   English   中英

SQL Server 2008中带有随机顺序的SQL查询结果分页

[英]SQL Query results pagination with random Order by in SQL Server 2008

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

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

我正在关注本教程: 教程

但是,我不能将查询与OFFSET子句一起使用,因为托管使用SQL SERVER2008。(我相信它是在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
  1. 将整数列“ order”添加到表中
  2. 编写代码以唯一的随机数填充所有行中的此列
  3. 时不时地运行此代码以随机排列行
  4. 按“顺序”排序时照常进行分页

请记住,如果您在某人分页的中间打乱行,则相同的行会出现在不同的页面上。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM