如何提供更新内容的下一页?

时间:2008-09-02 01:25:18

标签: sql paging

如果您知道如何更好地制定问题,请随意编辑标题。 (标记也是一个问题。)在这种一般形式下,问题可能太难了,所以让我们考虑一个具体的例子。

通过请求/questions ?sort=newest页面,您可以获得一系列stackoverflow问题。下一页链接指向/questions?page=2 &sort=newest。我想在服务器端,请求被转换为带有LIMIT子句的SQL查询。这种方法的问题是,如果在用户浏览第一页时添加了新问题,他的第二页将从他已经看到的一些问题开始。 (如果他每页有10个问题,并且恰好添加了10个新问题,他将第二次获得完全相同的内容!)

有没有一种优雅的方法来解决这个常见问题?我意识到这不是一个大问题,至少不是堆栈溢出,但仍然。

我最好的想法(除了为每个客户端存储请求历史记录)是使用/questions?answer_id=NNN格式。服务器返回以请求的答案开头的页面,并将下一页的第一个答案的id放入下一页链接。必须有办法为此编写SQL,对吗?

它通常是怎么做的?还是有更好的方法?

4 个答案:

答案 0 :(得分:1)

这不是一件容易的事。例如,stackoverflow中的“未答复”列表按投票数排序。因此,如果您要保存您正在查看的页面的最后一个ID(在cookie中,请求,会话,时间),并且在您浏览第2页时有人赞成帖子,那么自从最近上升投票以来,第3页就不完整了帖子可能已移至第1页或第2页。

唯一的方法是在某人会话中加载完整列表。请不要......

正如已经提到的,让我们希望人们现在已经习惯了。

答案 1 :(得分:0)

我见过的大多数网站都没有解决这个问题 - 它们会向您显示一个页面,其中包含您已经看过的一些内容。

您可能会考虑这个功能 - 当您点击“下一个”并看到之前看过的某些内容时,这是一个信号,您希望再次回到前面,因为有一些新内容。

答案 2 :(得分:0)

将每个问题标记为输入数据库的时间,将首页上次加载的时间作为Cookie或部分网址加载,并将搜索范围限制为nn+displaynum。前进。

但我不会打扰。这种行为足够统一,大多数用户都期望它,并且它可以作为新数据何时可用的标志。您甚至可以打开一个新的选项卡/窗口,它从列表顶部开始,以查看出现的情况。

答案 3 :(得分:0)

我相信SQL(对于MySQL)将是:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50