php - 如果在 5 分钟内没有添加任何行,则插入 MySQL 表
问题描述
我有一个表,其中包含一个由时间戳组成的列。我想检查 5 分钟内是否有新行。如果不是,则插入新行或更新最后一行状态列。
我试过这样的事情:
UPDATE table
SET status = 'offline'
WHERE CURRENT_TIMESTAMP() > ((SELECT MAX(dateandtime)) + INTERVAL 5 MINUTE)
或插入...但到目前为止没有成功。如果这很重要,我在 WordPress 中使用 PHP。
解决方案
我希望这可以帮助你。如果要添加新行,则需要使用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';
}
推荐阅读
- python - requests.exceptions.ChunkedEncodingError 连接断开
- python - AttributeError:“numpy.ndarray”对象没有属性“powers_”
- python - Python 3.x 中的“未使用局部变量 'name_variable' 值”错误
- sql - 如何将不同的表数据插入到单个表中
- c# - 在c#的父接口中声明属性getter,在子接口中声明setter
- sql - 通过 SSMS 2012 连接远程数据库时出现错误“ENspid 附近的语法不正确”“smoEnabled 附近的语法不正确”
- php - Codeigniter API 使用 WHERE Mysql Query PHP 的参数选项获取调用
- javascript - 使用fabricjs将部分HTML代码转换为svg
- c# - 无法发送 HTTPS 请求
- angularjs - 角度翻译字符串中的角度指令 ng-if 不起作用