我有一个mysql数据库,或者更具体的是一个我存储IP地址的mysql表。
这是因为我限制从我的网站发送的消息的数量。 我只是检查IP是否在表中,如果是,我告诉用户“减速”。
有没有办法让这个MySql表只存储x
分钟的行(记录)?
其他解决方案也很受欢迎......
答案 0 :(得分:2)
不,但您可以在插入/修改行时使用TIMESTAMP字段进行存储,并偶尔删除超过x分钟的行。
DELETE FROM your_table
WHERE your_timestamp < NOW() - interval 5 minute
为了解决您的实际问题,我建议为每个用户提供一个包含行的表,以及他们上次发送邮件的时间。假设它已正确索引并且您的查询有效,您可能不需要从该表中删除任何行,除非您使用用户表的外键并删除相应的用户。当用户发送消息时,如果已存在则插入一行,否则更新现有行(如果您愿意,可以使用例如MySQL扩展REPLACE)。
答案 1 :(得分:0)
我建议您向SELECT添加一个关于时间的WHERE子句“只需检查IP是否在表中”
SELECT * FROM table WHERE ip = <whatever> and timestamp > NOW() - 3*60
然后每晚可能会把那张桌子清空一次。
答案 2 :(得分:0)
我会创建一个列,其中包含上次发送的消息的时间戳,另一列具有帖子总数。在更新表之前,检查自上次发布以来是否已经过了至少X分钟。如果是这样,请将帖子总数更改为1,否则将值增加1。
答案 3 :(得分:0)
在一定间隔后不涉及删除 IP地址的一种方法是将地址存储为“时间”数据,即仅在某段时间内有效的记录。
最简单的方法是向表中添加时间戳列,并在输入IP时捕获输入表中的时间或不再“限制”的时间。
抓取IP限制的代码然后检查时间戳以查看它是否:
取决于您选择要表示的时间戳。
答案 4 :(得分:0)
此处使用时间戳和cron作业的其他解决方案可能是您的最佳选择,但如果您坚持使用mysql处理此问题,则可以使用Events。它们就像cron作业,除了mysql处理调度本身。它需要5.1+。