首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果列大于值,则更新列

如果列大于值,则更新列
EN

Stack Overflow用户
提问于 2020-04-28 00:10:02
回答 2查看 1.2K关注 0票数 1

我有一个有这些列的表

  • proxy_id (主键)
  • proxy (代理的IP)
  • current_requests (代理自其last_cool_down以来处理的当前请求数)
  • total_requests (此代理在其生存期内完成的请求数量)
  • last_used (上次使用该代理的日期)
  • last_cool_down (上一次此代理冷却的日期)

在我使用了代理之后,我运行了这个命令(显然使用了当前的日期和时间,但是我们假设当前的日期时间是2020-04-28 13:10:03)

代码语言:javascript
运行
复制
UPDATE proxy_table
SET
current_requests = current_requests + 1,
total_requests = total_requests + 1,
last_used = '2020-04-28 13:10:03',
last_cool_down = '2020-04-28 13:10:03'
WHERE proxy_id = 1

我的问题是,无论如何,我必须始终更新current_requestslast_used。但是,在上面的代码中,它不考虑这个条件。如果是current_requests + 1 == 20,那么current_requests = 0last_cool_down = '2020-04-28 13:10:03'。我该怎么做?

所以本质上是这样的

代码语言:javascript
运行
复制
UPDATE proxy_table

if (current_requests + 1 == 20) {
    SET current_requests = 0;
    SET last_cool_down = '2020-04-28 13:10:03';
else {
    SET current_requests = current_requests + 1;
}

SET total_requests = total_requests + 1;
SET last_used = '2020-04-28 13:10:03';
WHERE proxy_id = 1;

我希望在一个sql语句中这样做,而不是运行2个语句。我的尝试没有成功:

代码语言:javascript
运行
复制
UPDATE proxy_table
SET
    CASE
        WHEN current_requests + 1 = 20
        THEN current_requests = 0, last_cool_down = '2020-04-28 13:10:03' 
        ELSE current_requests = current_requests + 1
    total_requests = total_requests + 1,
    last_used = '2020-04-28 13:10:03'
WHERE
proxy_id = 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-28 00:25:02

可以使用CASE表达式根据current_requests的当前值设置列值。

代码语言:javascript
运行
复制
UPDATE proxy_table
SET
last_cool_down = CASE WHEN current_requests = 19 THEN '2020-04-28 13:10:03'
                      ELSE last_cool_down
                 END,
current_requests = CASE WHEN current_requests = 19 THEN 0 
                        ELSE current_requests + 1
                   END,
total_requests = total_requests + 1,
last_used = '2020-04-28 13:10:03'
WHERE proxy_id = 1

dbfiddle演示

票数 0
EN

Stack Overflow用户

发布于 2020-04-28 00:38:08

MySql具有这样的特殊特性,可以在UPDATE语句的表达式中使用已更改的列值,因此赋值的顺序必须如下:

代码语言:javascript
运行
复制
UPDATE proxy_table
SET last_cool_down = CASE WHEN current_requests + 1 = 20 THEN '2020-04-28 13:10:03' ELSE last_cool_down END,
    current_requests = CASE WHEN current_requests + 1 = 20 THEN 0 ELSE current_requests + 1 END,
    total_requests = total_requests + 1, 
    last_used = '2020-04-28 13:10:03'
WHERE proxy_id = 1 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61470562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档