【问题标题】:MySQL Select and Delete RowMySQL 选择和删除行
【发布时间】:2012-07-30 16:32:59
【问题描述】:

我有一个 cron 作业,我需要每分钟运行一次以检查数据库表。该表由两个字段(用户名、lastping)组成。 lastping 是一个 mysql 日期时间对象,由另一个脚本使用 mysql NOW() 函数设置。我需要检查 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";

【问题讨论】:

  • 你需要研究如何删除有条件的行。它在 MySQL 手册中。 Read it sometime.
  • 您不想要“小于”吗? WHERE lastping &lt; NOW() - INTERVAL 1 MINUTE(即,lastping 在一分钟前的之前)?
  • delete from client where lastping &gt; NOW() - INTERVAL 1 MINUTE ?答案几乎就在问题中。或者我误解了你想要实现的目标
  • 对不起,小于号的错字。

标签: php mysql select


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 2011-06-22
    • 1970-01-01
    • 2014-02-28
    • 2023-03-23
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多