php - 使用 C++ 将值添加到列中的现有 SQL 值

标签 php c++ sql

如何让此代码片段将“目标”的值加 10?

if (buffer.empty())
    break;

buffer.erase(buffer.size() - 1);
async_query("insert into " + db_name("files") + " ("
                           + db_name("player") + ", "
                           + db_name("goals") + ", "
                           + db_name("completed") + ", "
                           + db_name("fid") + ") values " + buffer
                           + " on duplicate key update" + "  "
                           + db_name("player") + " = values("
                           + db_name("player") + ")," + "  "
                           + db_name("goals") + " = values("
                           + db_name("goals") + ")," + "  "
                           + db_name("completed") + " = values("
                           + db_name("completed") + "),"
                           + "  mtime = unix_timestamp()");
buffer.clear();

最佳答案

首先,这是纯MySQL。它不适用于其他 SQL 引擎。

此外,我们的问题非常模棱两可:

如果插入命中现有的 fid,您是希望 goals值增加 10,还是保留 值并将其递增10?
或者你想在这两种情况下都将 goal + 10 的新值放在一起吗?

先清理一下

一旦 C++ 混淆移除,您的查询归结为:

insert into $db_name (player, goals, completed, fid) values $buffer 
on duplicate key update
    player    = values(player), 
    goals     = values(goals), 
    completed = values(completed),
    mtime     = unix_timestamp()

(变量已用$xxx表示)

我假设 fid 是将触发 on duplicate key 的唯一索引或主键。

我希望你没有多个唯一索引,否则请求可能只会修改与输入值匹配的第一条记录。

假设 fid 是键,您的请求所做的是删除 playergoalscompleted 字段(并更新时间戳)如果传递了重复的 fid

这对我来说似乎是一件不敬虔的事情,但你肯定有你的理由。

我也想知道为什么在创建新记录时你不更新时间戳,但这不是你问题的对象......

所以基本上你在这里有 3 种可能性:

1) 在任何情况下都将goals设置为新目标+10

这需要调整神秘缓冲区的内容,将 10 添加到新的目标值。

您的代码无需其他修改即可正常工作。

2) 将 goals 设置为新记录的新值,并为旧记录设置相同的新值 + 10

insert into $db_name (player, goals, completed, fid) values $buffer 
on duplicate key update
    player    = values(player), 
    goals     = values(goals) + 10, 
    completed = values(completed),
    mtime     = unix_timestamp()

3) 将 goals 设置为新记录的新值,并将旧记录的旧目标值增加 10

insert into $db_name (player, goals, completed, fid) values $buffer 
on duplicate key update
    player    = values(player), 
    goals     = goals + 10, 
    completed = values(completed),
    mtime     = unix_timestamp()

由于我无法理解此查询的用途,因此我让您选择解决方案。

关于php - 使用 C++ 将值添加到列中的现有 SQL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21541363/

相关文章:

c++ - 如何正确使用动态数组?

sql - 如何改进时间线 SQL 查询

php - PHP 中的 MySQL 更新查询

sql - 如何向 SQL Server 中的表添加不允许空值的列?

php - 可翻译 Doctrine 实体的 Symfony 表单

javascript - 使用纯 Javascript 通过 AJAX 发送 WordPress 对象

php - .htaccess 显示名称而不是 id

php - 重置密码时间调查

c++ - 如何在 C++ 中添加 50 位数字?

c++ - 如何存储可变类型的参数?