我正在尝试对我网站上的页面实施分页,该页面返回数据库表中的结果。
目前,它以随机顺序返回所有行。但是,随着我的数据库不断增长,我想对这些结果进行分页,而不是将它们全部显示在一个页面上。但是,我不想仅仅为了显示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
答案 0 :(得分:2)
请记住,如果您在某人分页的中间对行进行随机播放,则相同的行可以显示在不同的页面上。
答案 1 :(得分:1)
只需选择TOP(pagesize)
即可。由于您的订单是随机的,请求page = 2不会导致显示第1页的原始结果的第2页。换句话说,当订单是 random 并且更改时每次 ,然后第1页始终对所请求的任何页面都是正确的。