确保相册的新鲜内容

时间:2009-04-21 22:01:31

标签: php mysql

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

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

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

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

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

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

我想确保用户看不到相同的照片。我想为每位访客添加一个独特的Cookie,然后当用户访问照片时,我会将其记录在访问表中。从DB为“下一个”选择新照片时,我确保用户之前没有访问过该照片。

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

关于这样做的最佳方式或替代方法的任何想法?

编辑:

可能不够清晰,版本非常短:我想确保在图片中循环时没有重复的内容。优选地,在延长的时间内,不仅是会话。

编辑2:

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

alt text
(来源:googlepages.com

3 个答案:

答案 0 :(得分:0)

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

由于会话使用cookie工作,这将在他们清除cookie之前有效,即使他们没有注册或登录。

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

编辑:

在此问题上,您不仅可以存储用户查看过的最旧的照片ID,还可以存储最新的照片ID。这样,每次他们点击下一步,你会看到你的最新照片是否比他们查看过的最新照片更新。如果是这样,请向他们展示最新照片。如果没有,请向他们展示最新的照片,这张照片比他们“最早查看”的照片旧。

答案 1 :(得分:0)

我无法确切地说出你的意思,但你要做的就是根据项目的添加时间(最高=最新)订购带有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

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

答案 2 :(得分:0)

当'图像查看器'关闭时,您只需存储开始ID(用户看到的第一张照片)和用户最后看到的照片的ID。

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

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

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