我正在开发一个用 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 次”的逻辑,并且不需要一个全新的参考表。
您可以使用和创建一个log
表。每次随机选择行时,请确保仅选择在过去一小时内显示不超过 10 次的行。id
date_displayed
SELECT * FROM table
WHERE id NOT IN (
SELECT id FROM log
WHERE date_displayed > now() - interval 1 hour
GROUP BY id HAVING COUNT(*) >= 10
)
ORDER BY rand()
此外,一小时后您不再需要旧插入,因此您可能需要执行 DELETE 查询以删除旧记录。
DELETE FROM log WHERE date_displayed < now() - interval 1 hour