gpt4 book ai didi

javascript - Node.JS + MySQL - 将 40 多个 UPDATE 语句压缩成一个,每个语句都有唯一的 WHERE 子句

转载 作者:搜寻专家 更新时间:2023-10-30 23:32:27 26 4
gpt4 key购买 nike

我正在尝试制作一个涉及 MySQL 数据库的冷却系统,以存储冷却中的“剩余时间”。我目前有大约 50 个冷却时间需要管理,每秒更新一次数据库。是的,我需要 1 秒的精度,不,我不能使用 vars,因为数据需要在应用程序重启后继续存在。所以这是我的代码:

function cooldowns() {
connection.query("UPDATE users SET col1 = col1 - 1 WHERE col1 > 0")
connection.query("UPDATE users SET col2 = col2 - 1 WHERE col2 > 0")
connection.query("UPDATE users SET col3 = col3 - 1 WHERE col3 > 0")
connection.query("UPDATE users SET col4 = col4 - 1 WHERE col4 > 0")
connection.query("UPDATE users SET col5 = col5 - 1 WHERE col5 > 0")
connection.query("UPDATE users SET col6 = col6 - 1 WHERE col6 > 0")
connection.query("UPDATE users SET col7 = col7 - 1 WHERE col7 > 0")
connection.query("UPDATE users SET col8 = col8 - 1 WHERE col8 > 0")
}

我有这些行,其中大约有 40-50 行......全部用于不同的列。现在我知道我可以按照 UPDATE users SET col1 = asd, col2 = asdf, etc 的方式做一些事情,但问题是 WHERE 子句对每个查询都是唯一的.我怎样才能将所有这些压缩到一个查询中?请注意,表名在整个函数中是相同的,但列和 WHERE 子句不是。

最佳答案

在当前情况下,运行多个查询似乎是您唯一的选择。

但是,从您的示例来看,此处更新的所有列似乎都是数字,并且条件是确保值不低于零。

如果这是您正在寻找的唯一约束,您可以采用不同的方法。稍微更改您的架构,将每列的数据类型从 Int 更改为 Int UNSIGNED。这将自动确保值不会低于零。为此类列分配负值将改为存储零。

现在有了您的新模式,您可以运行单个查询,如:

function cooldowns() {
connection.query("UPDATE users SET col1 = col1 - 1, col2 = col2 - 1, col3 = col3 -1 ...");
}

where 子句可以完全跳过,或修改为其他选择行的必要条件。

关于javascript - Node.JS + MySQL - 将 40 多个 UPDATE 语句压缩成一个,每个语句都有唯一的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47566756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com