0

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

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

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

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

希望它有用的解释。

4

2 回答 2

1

可能最简单的方法是添加一个调用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 次”的逻辑,并且不需要一个全新的参考表。

于 2012-06-22T07:32:24.840 回答
0

您可以使用和创建一个log表。每次随机选择行时,请确保仅选择在过去一小时内显示不超过 10 次的行。iddate_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
于 2012-06-22T07:28:49.247 回答