2

我有一个非活动系统。它应该在 15 分钟后从非活动表中删除用户。如果在该表中找不到用户,我还有一个代码可以将其注销。非活动脚本在每次页面刷新时更新用户。

这是我尝试过的非活动代码,到目前为止它不起作用:

$result = mysqli_query($con,"SELECT * FROM inactive");

while($row = mysqli_fetch_array($result))

if ($row['inactive'] > timestampadd(MINUTE, -15, now()))
  {



    }else {

$db_query = "DELETE FROM inactive WHERE username='$username'";
$result = mysql_query($db_query);


    }
4

2 回答 2

8
CREATE EVENT IF NOT EXISTS `remove_inactives`
ON SCHEDULE EVERY 15 MINUTE
ON COMPLETION PRESERVE
ENABLE
DO
    DELETE FROM `inactive`
        WHERE `timestamp` < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
;

^ 使用一组并忘记重复发生的MySQL 事件 让服务器为您完成工作:)

对于 PHP:

mysqli_query($connection, // or mysql_query(
<<<SQL
    CREATE EVENT IF NOT EXISTS `remove_inactives`
    ON SCHEDULE EVERY 15 MINUTE
    ON COMPLETION PRESERVE
    ENABLE
    DO
        DELETE FROM `inactive`
            WHERE `timestamp` < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
    ;
SQL;
); // ends *_query() call

您只需要运行一次即可在服务器上安装!

于 2013-07-13T15:18:14.823 回答
1

如果你有一个时间戳字段,你可以只做一个查询,而不必从你的选择中遍历结果集:

DELETE FROM inactive
WHERE timestamp < DATE_SUB(NOW(), INTERVAL 15 MINUTE)

您可以在 cron 或您的页面上执行该查询。

于 2013-07-13T15:13:03.577 回答