我有一个如下所示的MySQL表:

create table login_schedule(name varchar(20),emp_id varchar(5),login_time datetime,logout_time datetime);

数据插入如下所示:

insert into login_schedule values('Ram','01',now(),now()+interval 30 minute);

因此,我只想在一条SELECT语句提供空集结果的情况下执行更新查询.

下面是我的SELECT语句:

select name,emp_id,logout_time,login_time from login_schedule where emp_id='01' and now()<date_format(logout_time,'%Y-%m-%d %H:%i:%s');

我的更新声明如下:

update login_schedule set logout_time=(select date_format(now() + interval 30 minute,'%Y-%m-%d %H:%i:%s') from dual) where emp_id='01';

那么,有没有什么办法请你帮忙.我主要要实现的是,如果员工在分配的注销时间(即登录时间后30分钟)之前执行任何操作,则他的注销时间将增加到另一个30分钟.如果用户保持空闲30分钟,则他不能执行任何操作,他必须重新登录才能再获得30分钟.

因此,要实现这一点,第一个SELECT查询必须返回空集,然后只执行UPDATE查询,否则如果SELECT查询给出任何输出,则UPDATE查询将不会执行.

请帮帮忙.

推荐答案

我认为您根本不需要执行SELECT查询.您所描述的是,如果且仅当该时间尚未过go 时,您希望将注销时间延长到Now()+30分钟.

此更新将实现以下目标:

UPDATE login_schedule
SET logout_time = CASE 
  WHEN logout_time > NOW() THEN NOW() + INTERVAL 30 MINUTE 
  ELSE logout_time END
WHERE emp_id = '01';

Mysql相关问答推荐

在时间戳上搜索大的MySQL表很慢

我可以在姓名和姓名日期之间进行搜索吗?

将时间戳四舍五入到最接近的半小时而不遗漏丢失的数据

如何在 SQL 中迭代所有名称和排名排列

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

MySQL 可以用于将列表排序为三分之三吗?

无法从mysql数据库获取数据

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

如何解码存储在带有type*:前缀的base64中的数据?

如何优化使用多个 LEFT JOIN 和 GROUP BY 子句的慢速 MySQL 查询?

错误1075:表定义不正确;只能有一个自动列,它必须定义为一个键(使用 gorm 和 mysql)

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

使用case查询并更新最后一条记录

SQL 中的双杠 (||) 是什么意思?

终止空闲的mysql连接

MySQL SELECT 增量计数器

ASP.NET EntityFramework 获取数据库名称

如何存储重复日期牢记夏令时

从mysql中的大表中快速 Select 随机行

如何让mysql自动启动? (仅限 linux-cli)