我在数据库中的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>';
?>
您可以尝试使用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;
此查询将删除Validity
中日期已过的行。
$query = "DELETE FROM bonusdetails
WHERE BonusType = 'Match Bonus'
AND Validity < '".date('Y-m-d', time())."'";
如果Validity
是DATETIME
:
$query = "DELETE FROM bonusdetails
WHERE BonusType = 'Match Bonus'
AND Validity < '".date('Y-m-d H:i:s', time())."'";
之后:
- 你可以在代码中调用这个查询(但每次都会调用,所以这不是最好的解决方案(
- 让一个cron每天调用一次(更好(
$conn = new mysqli($servername,$username,$password,$dbname);
$query = "DELETE FROM Urls WHERE created_at < now()";
$conn->query($query);
这可能对有帮助
您可以创建Trigger
,它将在每次有人更新您的数据时删除您的记录。
DELIMITER $$
Create Trigger trigger_name
AFTER UPDATE ON bonusdetails
FOR EACH ROW BEGIN
DELETE bonusdetails
WHERE Validity > Now();
END$$
DELIMITER ;