php - 限制特定对象一小时内显示数量的最佳方法?

标签 php mysql

我正在开发一个用 php 编写的 Web 应用程序。我在 mysql 表中有一些对象(表示为行)。我需要在一天中随机展示它们。

如何限制特定对象的显示次数,例如一小时内不超过 10 次?

通过显示计数,我的意思是对象被渲染了多少次。

例如,有 100 张图像,每个浏览量随机显示 5 张图像。我需要通过将图像的显示次数限制为一小时来标准化图像显示分布,以防止一张图像显示 1000 次,另一张图像显示 3 次。

希望它的解释有用。

最佳答案

最简单的方法可能是添加一个名为 last_shown 的字段到您的表格,然后将其从候选列表中排除(如果它在一小时内显示)。例如:

SELECT id FROM my_objects WHERE last_shown < DATE_SUB(NOW(), INTERVAL 1 HOUR) ORDER BY RAND() LIMIT 1

然后,当您显示该实际对象时,为该列添加时间戳,即:

UPDATE my_objects SET last_shown = NOW() WHERE id = <the_id_you_displayed>

这种方法更简单,但同样有效。如果您将时间范围减少到每 6 分钟一次,则实际上与“一小时内 10 次”的逻辑类似,并且不需要整个新的引用表。

关于php - 限制特定对象一小时内显示数量的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151814/

相关文章:

php - 清除二维 session 数组

php-fpm SIGSEGV redis

php - JOINed 表上的 GROUP BY 和 ORDER BY - 复杂且缓慢

mysql - 返回mysql查询的列名

php - 外键、连接和返回索引

php - 需要一个基于 php 的聊天脚本来为网站成员提供与访问者的聊天功能

php - PhalconPHP Framework - 如何更新模型对象和相关对象

php - 仅从数据库 php (Laravel) 选择年份

mysql - (mysql) 从 digikam 4.* 迁移到 5.* 时数据库迁移困难

mysql - 错误 1005 无法创建添加外键的表