Php 有没有办法让MySql成为“数据库”;更新自身;?

Php 有没有办法让MySql成为“数据库”;更新自身;?,php,javascript,sql,mysql,database,Php,Javascript,Sql,Mysql,Database,我有一个mysql数据库,或者更具体地说,一个存储IP地址的mysql表 这是因为我限制了从我的网站发送的消息的数量。 我只是检查IP是否在表中,如果在表中,我会告诉用户“慢下来” 有没有办法让这个MySql表只存储一行(一条记录)时间x分钟 也欢迎使用其他解决方案……否,但您可以在插入/修改行时使用字段来存储,偶尔也可以删除超过x分钟的行 DELETE FROM your_table WHERE your_timestamp < NOW() - interval 5 minute 从您

我有一个mysql数据库,或者更具体地说,一个存储IP地址的mysql表

这是因为我限制了从我的网站发送的消息的数量。 我只是检查IP是否在表中,如果在表中,我会告诉用户“慢下来”

有没有办法让这个MySql表只存储一行(一条记录)时间
x
分钟

也欢迎使用其他解决方案……

否,但您可以在插入/修改行时使用字段来存储,偶尔也可以删除超过x分钟的行

DELETE FROM your_table
WHERE your_timestamp < NOW() - interval 5 minute
从您的_表中删除
您的时间戳

不过,为了解决实际问题,我建议为每个用户设置一个表,其中包含一行,以及他们上次发送消息的时间。假设索引正确并且查询有效,您可能永远不需要删除此表中的任何行,除非您使用用户表的外键并删除相应的用户。当用户发送消息时,如果行已经存在,请插入该行,否则请更新现有行(如果愿意,您可以使用MySQL扩展替换该行)。

我建议您在选择“仅检查IP是否在表中”时添加一个关于时间的WHERE子句

从表中选择*,其中ip=和timestamp>NOW()-3*60

然后可能每晚清空一次该表。

我会创建一个列,其中包含上次发送消息的时间戳,另一个列包含帖子总数。在更新表之前,请检查自上次发布以来是否至少过了X分钟。如果是这样,请将POST总数更改为1,否则将该值增加1。

一种不涉及在特定时间间隔后删除IP地址的方法是将地址存储为“临时”数据,即仅在特定时间段内有效的记录

最简单的方法是向表中添加一个时间戳列,在输入IP时,捕获它被输入到表中的时间,或者捕获它不再被“限制”的时间

获取要限制的IP的代码然后检查时间戳,以查看它是否为:

  • 早于某个阈值(例如,如果您在一个多小时前录制了IP,请忽略它)或
  • 当前时间大于存储在那里的到期日期(例如,如果IP的时间戳显示为2010-11-23 23:59:59,而这是过去的,则忽略它)

根据您选择的时间戳来表示什么。

这里使用时间戳和cron作业的其他解决方案可能是您最好的选择,但是如果您坚持让mysql自己处理这个问题,您可以使用。它们类似于cron作业,只是mysql自己处理调度。但它需要5.1+的时间间隔。

我是否完全按照您编写的那样编写“NOW()-interval 5分钟”以获得5分钟的时间间隔?如果没有,请更新我应该如何编写代码来比较时间戳(从现在算起)和3小时后的时间?@Camran:这就是5分钟前的时间。尝试运行
SELECT NOW()-interval 3 hour
,您应该在3小时前获得时间。实际上,我有一个DATETIME字段,而interval不起作用。有没有必要使用3*60*60这样的东西持续三个小时?@amran:减去间隔也适用于DATETIME列。您可能犯的一个错误是键入
hours
而不是
hour
。该单元在MySQL中必须是单数形式。如果您仍然无法使其工作,请发布您尝试的确切查询以及错误消息。
 SELECT * FROM table WHERE ip = <whatever> and timestamp > NOW() - 3*60