【问题标题】:How to provide next page of updated content?如何提供更新内容的下一页?
【发布时间】:2010-09-07 12:14:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我喜欢您建议的解决方案。我还没有看到任何可以击败它的东西(我也想不出更好的东西)。 :) 我会试试下面的 SQL。

标签: sql paging


【解决方案1】:

这不是一个简单的方法。例如,stackoverflow 上的“未答复”列表按投票数排序。因此,如果您保存了您正在查看的页面的最后一个 ID(在 cookie、请求、会话中,任何地方)并且有人在您浏览第 2 页时为帖子点赞,则第 3 页自最近点赞以来并不完整帖子可能已移至第 1 页或第 2 页。

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

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

【讨论】:

  • 完全同意。此外,如果您有这么多的输出,最好使用报告或更好的搜索过滤选项。如果您有超过一页的相关 Web 输出,则布局设计可能需要重构
【解决方案2】:

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

您可能会认为这是一项功能 - 当您单击“下一步”并看到一些您以前看过的内容时,这表明您想再次回到前面,因为有一些新内容。

【讨论】:

    【解决方案3】:

    用输入数据库的时间标记每个问题,将上次加载首页的时间作为 cookie 或 URL 的一部分,并在前进时将搜索限制在 nn+displaynum 之间。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 2013-07-01
        相关资源
        最近更新 更多