-4

我有一个 cron 作业,我需要每分钟运行一次以检查数据库表。该表由两个字段(用户名、lastping)组成。lastping 是一个 mysql 日期时间对象,由另一个脚本使用 mysqlNOW()函数设置。我需要检查 lastping 以查看它自上次更新以来是否已经超过一分钟,如果它在最后一分钟没有更新,我想删除包含该用户名和 lastping 的行。我想我可以使用类似这个 sql 语句的东西进行检查。

FROM client WHERE lastping < NOW() - INTERVAL 1 MINUTE;

我的问题是,如何格式化 select 语句以检查整个表并删除记录,如果它已经超过一分钟。

对于仍然连接的用户,我将每 15-30 秒更新一次数据库。这样做的全部目的是让我看到哪些最终用户正在使用我的 C++ 应用程序,或者至少在过去 60 秒内,这样我就可以保持统计数据。

这就是我到目前为止所做的,输出是 Deleted inactive users 但这实际上并没有发生。

mysql_connect(SERVER, USERNAME, PASSWORD);
mysql_select_db(DATABASE);
$query="DELETE (username, lastping) from client where lastping < NOW() - INTERVAL 1 MINUTE";
mysql_query($query) or die ('Error updating database');
echo "Deleted inactive users";
4

1 回答 1

0

您不能在一个查询中删除和选择行。无法“返回”或“选择”已删除的行。

然后您可能想要使用事务,您将在单个事务中执行两个查询。 http://dev.mysql.com/doc/refman/5.0/en/commit.html

于 2012-08-01T18:13:03.493 回答