自动删除MySQL中已过期的数据行

4

我已经在数据库的bonusdetails表中添加了一些奖金代码行。所有的奖金代码都有一个到期日期。

是否可以通过PHP自动删除已经过期的行? 我正在使用的代码是(有效期是日期):

$query = "select * 
          from bonusdetails 
          where BonusType='Match Bonus' 
          order by Validity ASC limit 0,30;";

$result = mysql_query($query);

echo '<table>';
.....
.....
.....
echo '</table>';

?>

1
什么样的保证过期了?1秒钟?10分钟?500年? - Darren
你不应该使用mysql_query函数。这些函数已经被弃用了。在这里查看如何替换它们:http://www.php.net/manual/tr/function.mysql-query.php - clami219
我认为,我们可以使用cron来完成这个。 - Khushboo
4个回答

10

您可以尝试使用MySQL事件来实现此目的:

CREATE EVENT IF NOT EXISTS `dbName`.`eventName`
ON SCHEDULE
EVERY 1 DAY // or 1 HOUR
COMMENT 'Description'
DO
BEGIN

DELETE FROM `dbName`.`TableName` WHERE `expireDateCol` < NOW();

END

请注意,MySQL事件调度程序需要在您的服务器上启用:

SET GLOBAL event_scheduler = ON;

在@user2077650的情况下,“事件”比“触发器”更好。 - Charlesliam
1
你知道如何在Sequelize中实现事件吗? - Manav Kothari

1

这个查询将删除过期的Validity日期中的行。

$query = "DELETE FROM bonusdetails 
          WHERE BonusType = 'Match Bonus' 
          AND Validity < '".date('Y-m-d', time())."'";

如果 ValidityDATETIME

$query = "DELETE FROM bonusdetails 
          WHERE BonusType = 'Match Bonus' 
          AND Validity < '".date('Y-m-d H:i:s', time())."'";

之后:

  • 你可以在你的代码中调用这个查询(但是这样每次都会被调用,所以不是最好的解决方案)
  • 设置定时任务 每天调用一次(更好的选择)

1
  $conn = new mysqli($servername,$username,$password,$dbname);
  $query = "DELETE FROM Urls WHERE created_at < now()";
  $conn->query($query);

这可能会有帮助


0
您可以创建一个触发器(Trigger),每当有人更新您的数据时,它就会删除您的记录。
DELIMITER $$
Create Trigger trigger_name
  AFTER UPDATE ON bonusdetails
  FOR EACH ROW BEGIN

  DELETE bonusdetails
  WHERE Validity > Now();

END$$ 
DELIMITER ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接