代码之家  ›  专栏  ›  技术社区  ›  buti-oxa

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

  •  3
  • buti-oxa  · 技术社区  · 16 年前

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

    你可以通过请求得到一个堆满问题的屏幕 /questions ?sort=newest 页。下一页链接指向 /questions?page=2 &sort=newest . 我假设在服务器端,请求被转换为带有limit子句的SQL查询。这种方法的问题是,如果在用户浏览第一页时添加了新问题,那么他的第二页将从他已经看到的一些问题开始。(如果他每页有10个问题,并且碰巧添加了10个新问题,他会第二次得到完全相同的内容!)

    有没有优雅的方法来解决这个常见问题?我意识到这并不是什么大问题,至少对于stackoverflow来说不是,但是仍然是。

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

    通常是这样做的吗?或者有更好的方法?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Casper    16 年前

    这不是一个简单的方法。例如,StackOverflow中的“未应答”列表按投票数排序。因此,如果您保存了正在查看的页面的最后一个ID(在cookie、请求、会话中,无论在何处),并且有人在您浏览第2页时对某个帖子进行了上票,那么第3页就不完整,因为最近的上票帖子可能已经移到了第1页或第2页。

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

    如前所述,我们希望人们现在已经习惯了这一点。

        2
  •  0
  •   Paul Tomblin    16 年前

    我看到的大多数网站都不能解决这个问题——它们向您显示一个页面,其中包含一些您已经看到的内容。

    你可能会认为这是一个功能——当你点击“下一步”并看到一些你以前看到的内容时,这是一个信号,表明你想再次回到前面,因为有一些新的内容。

        3
  •  0
  •   dmckee --- ex-moderator kitten    16 年前

    标记每个问题及其进入数据库的时间,将上次作为cookie或URL的一部分加载FrontPage的时间,并将搜索限制为项目 n 通过 n+displaynum 当你前进的时候。

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

        4
  •  0
  •   AJ.    16 年前

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

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