【问题标题】:Ensuring fresh content for photo album确保相册内容新鲜
【发布时间】:2019-03-12 13:00:28
【问题描述】:

我正在开发一个用户提交照片的网站,这些照片可以在页面上一张一张地查看。

还有一个页面,您可以在其中看到多张照片的较小版本。

当用户点击任何这些较小的照片时,他们会进入大版本页面,按“下一步”会将他们带到该类别中的另一张照片。

我非常希望新照片优先于旧照片。

我的想法是,当用户点击下一张时,他会被带到最新的照片,然后从那里移动下一张会让用户向后浏览所有新照片。

问题是,当用户离开单个照片页面时,返回到多个拇指页面,然后单击那里的另一张照片,用户在单击下一步时将开始看到相同的新照片。

我想确保用户看不到同一张照片。我考虑为每个访问者放置一个唯一的 cookie,然后当用户访问照片时,我将其记录在访问表中。当从 DB 中选择“下一张”的新照片时,我确保用户之前没有访问过该照片。

我(过早地)担心这会对数据库负载产生什么影响。

关于执行此操作的最佳方法或替代方法的任何想法?

编辑:

可能不够清楚,非常简短的版本:我想确保在循环浏览图片时没有重复的内容。最好是延长时间,而不仅仅是一个会话。

编辑 2:

所以这就是我目前正在考虑做的事情。看起来不错?我把它放在一起(字面意思是,电源在 5 分钟内关闭进行维修,我明天必须回来,希望这是有道理的)。


(来源:googlepages.com

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    当“图像查看器”关闭时,您可以简单地存储开始 id(用户看到的第一张照片)和用户最后看到的照片的 id。

    当用户回来时,您可以简单地检查是否在哪里添加了较新的照片,如果是,则首先显示这些,直到您到达用户首先看到的图像的 ID(存储在 cookie 或数据库中)。然后跳过直到用户最后看到的图像的 id,然后从那里继续。

    这不会在 cookie/会话或数据库上产生巨大的开销。而且它基本上是万无一失的 .. 至少相对准确,直到您必须解决以下问题;如果用户在一系列照片的中间出现怎么办?显然,您可以存储一系列 id..

    这样的解决方案有很多。想想“聪明”。并考虑到精度的需要。如果您为每张访问过的照片在数据库中记录,您将对用户看到的内容有准确的回忆,但性能很可能会下降(我可以向您保证,随着时间的推移会急剧下降)。如果您喜欢性能,并且我相信您的用户会喜欢,那么我建议您看看可能不太准确(如上所述)但尊重性能的解决方案。

    【讨论】:

      【解决方案2】:

      如果您使用会话,则可以跟踪用户查看过的最早的“新”照片 ID。因此,当他们单击下一步时,您会显示最新照片并将其 ID 存储在用户会话中。每次他们单击下一步时,给他们您拥有的最新照片,该照片低于他们在会话中拥有的照片的 ID。这样,您的会话将始终知道从哪里开始向他们展示他们尚未看到的相对较新的照片。您可以从中断的地方继续浏览照片记录。

      由于会话使用 cookie 来工作,这将一直有效,直到他们清除他们的 cookie,即使他们没有注册或登录。

      但是,这不会考虑自用户开始浏览以来已提交或上传的新照片。如果不存储用户查看过的每张照片的记录,那么找出一种模拟这种记录保存水平的方法将非常具有挑战性。

      编辑:

      考虑到这一点,您不仅可以存储用户查看过的最早的照片 ID,还可以存储最新的。这样,每次他们单击下一步时,您都会看到您的最新照片是否比他们查看过的最新照片新。如果是这样,向他们展示最新的照片。如果没有,请向他们展示您拥有的比他们“最旧查看”的照片更早的最新照片。

      【讨论】:

      • 我想过这个解决方案,但是当用户第二天来的时候,他会从头开始。我可能不切实际地保留如此广泛的用户历史并选择这个解决方案:)
      • 是的,php 会话不会永远持续下去。您可以将用户上次访问的照片 ID 与他的用户记录一起存储在数据库中。这样他们就不会每天都重新开始,但这仍然不能解决“新照片”问题。
      【解决方案3】:

      我不能完全说出你的确切意思,但你要做的就是根据添加项目的时间(最高 = 最新)订购带有 id 的照片,并在你点击下一个时减少 id,这样他们可以在任何地方跳入查看队列,单击下一步将移动到下一张在线照片。

      编辑: 听起来您需要存储用户唯一变量,了解他们查看过的内容和未查看过的内容。

      根据您的其他回复,您希望它在更长的时间范围内。

      如果您不愿意将其缩短到会话长度时间范围(更简单的实现),您可以按照您的建议将视图存储在数据库中。

      为了解决您对磁盘空间的担忧,您可以采取各种措施来减少它。

      命名一个: - 存储单个视图,但在可能的情况下存储视图序列。以简单的形式压缩。所以用户查看 id 1,2,3,4,6,12,13,15。您的数据库视图表可能如下所示: 查看

      UserID  ImageIDStart  ImageIDEnd
      jim        1             4
      jim        6            null
      jim        12            13
      jim        15           null
      

      您可能希望将这些概念拆分为两个表,“序列”和“单个视图”,以便进行正确的查询和更轻松的处理。您可能需要某种形式的压缩器,它可以获取单个视图并在可能的情况下转换为序列。

      【讨论】:

      • 可能不够清楚,非常简短的版本:我想确保循环浏览图片时没有重复的内容。最好是延长时间,而不仅仅是一个会话。
      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      相关资源
      最近更新 更多