如何提供下一页的更新内容?
如果我们知道如何更好地提出问题,请随时编辑标题。 (标记也是一个问题。)以这种一般形式,这个问题可能太难了,所以让我们考虑一个具体的例子。
通过请求/ questions?sort = newest
页面,我们可以获得大量的stackoverflow问题。下一页链接指向/ questions?page = 2&sort = newest
。我想在服务器端,将请求转换为带有LIMIT子句的SQL查询。这种方法的问题在于,如果在用户浏览第一页时添加了新问题,那么他的第二页将以他已经看到的一些问题开始。 (如果他每页有10个问题,并且碰巧添加了10个新问题,那么第二次得到的内容完全一样!)
是否有解决此常见问题的优雅方法?我意识到这不是一个大问题,至少不是对于stackoverflow而言,但仍然如此。
我最好的主意(除了存储每个客户端的请求历史记录之外)是使用/ questions?answer_id = NNN
格式。服务器返回以请求的答案开头的页面,并将下一页上的第一个答案的ID放入下一页链接。必须有一种为此编写SQL的方法,对吗?
通常是这样吗?还是有更好的方法?
解决方案
回答
我见过的大多数网站都不能解决这个问题,它们会向我们显示一个包含我们已经看到的某些内容的页面。
当我们单击"下一个"并看到以前看到的某些内容时,我们可能会认为它是一项功能,这表明我们希望重新回到前面,因为其中有一些新内容。
回答
标记每个问题的时间,将其输入数据库的时间,记录首页最后一次加载为Cookie或者URL的时间,并在继续搜索时将搜索范围限制在n到n + displaynum之间。
但是我不会打扰。这种行为是足够统一的,大多数用户都希望这样做,并且它是新数据何时可用的标志。我们甚至可以打开一个新的标签页/窗口,该标签页/窗口从列表顶部开始,以查看发生了什么。
回答
我相信SQL(对于MySQL)将是:
SELECT * FROM entries WHERE entry_id >= @last_viewed_entry_id ORDER BY entry_id LIMIT 50
回答
这不是简单的方法。例如,此处stackoverflow的"未答复"列表按投票数排序。因此,如果我们要保存正在查看的页面的最后一个ID(在cookie,请求,会话中,在任何地方),并且有人在浏览第2页时对帖子进行了投票,则由于最近的投票,第3页并不完整帖子可能已移至第1或者2页。
唯一的方法是在某人会话中加载完整列表。请不要...
如前所述,我们希望人们现在已经习惯了这一点。