[英]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
请记住,如果您在某人分页的中间打乱行,则相同的行会出现在不同的页面上。
只需选择TOP(pagesize)
。 由于您的订单是随机的,因此请求page = 2不会导致显示第1页的原始结果的页面2。换句话说,当订单是随机的并且每次更改时,页面1始终对所请求的任何页面都是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.