首页 > 解决方案 > 如果在 5 分钟内没有添加任何行,则插入 MySQL 表

问题描述

我有一个表,其中包含一个由时间戳组成的列。我想检查 5 分钟内是否有新行。如果不是,则插入新行或更新最后一行状态列。

我试过这样的事情:

UPDATE table
SET status = 'offline'
WHERE CURRENT_TIMESTAMP() > ((SELECT MAX(dateandtime)) + INTERVAL 5 MINUTE)

或插入...但到目前为止没有成功。如果这很重要,我在 WordPress 中使用 PHP。

标签: phpmysql

解决方案


我希望这可以帮助你。如果要添加新行,则需要使用INSERT带有选择的命令,如下所示...

INSERT INTO sessions(user_id, last_visit)
SELECT 1, CURRENT_TIMESTAMP
WHERE EXISTS (
      SELECT 1
      FROM sessions
      WHERE user_id = 1
      HAVING (MAX(last_visit) + INTERVAL 5 MINUTE) < CURRENT_TIMESTAMP
);

如果要更新status列,则需要使用简单UPDATE

UPDATE sessions
SET status = 'offline'
WHERE (last_visit + INTERVAL 5 MINUTE) < CURRENT_TIMESTAMP;

顺便说一句,你只需要一个last_visit列,如果它小于 now + 5 分钟,你就已经知道用户离线了。而且您必须通过简单的更新来更新每个授权请求的这个值。

update users set last_visit = CURRENT_TIMESTAMP where id = ?;

因此,您的 User 类将具有getStatus()如下功能:

public function getStatus() {
    if ($this->lastVisit < (Carbon::now()->subMinutes(5))) {
        return 'offline';
    }

    return 'online';
}

推荐阅读