使用C 在列中的现有SQL值中添加值
Adding a value to an existing SQL value in a column using C++
我将如何使此代码摘要添加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
,或者保留 old> old 值,则您是否希望goals
的新值逐渐增加10。br>还是您想在两种情况下都放置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
是关键,您的请求要做的是擦除player
,goals
和completed
字段(并更新时间戳),如果传递了重复的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()
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()
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()
由于我无法理解此查询的目的,因此我会选择解决方案。
如果我理解问题,那么这应该可以起作用,我对问题中使用的代码并不完全熟悉,但我觉得我明白您要做什么。
为什么不将其分解为两个不同的MySQL查询。第一个是在创建此记录的情况下运行的,第二个记录是在记录的更新上运行。现在,因为我不太了解您的代码,所以我只会写逻辑:
If the record you are going to insert does not exist, then create it
else if it does exist, get the current value of goals, add 10, the store it in a variable, Next update the record with the variable holding the new value of goals.
我使用我的PHP知识回答了这个问题,所以我感觉自己缺少某些东西,因此,请至少尝试一下这个想法,请告诉我是否真的没有回答这个问题。
this:
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") + " + 10)," + " "
+ db_name("completed") + " = values("
+ db_name("completed") + "),"
+ " mtime = unix_timestamp()");
请注意,+10
位发生在SQL查询内,实际上是在右手侧表达式values()
中。在PHP脚本中,它在引号内。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 使用C 在列中的现有SQL值中添加值
- 如何防止Visual Studio 2010在我的c++项目中添加大型SQL文件
- 添加,保存数据从MFC应用程序(Visual Studio 2015)到SQL Server
- 使用代理向Qt SQL模型添加虚拟列
- Qt将数据库SQL添加到从cMake导入的项目中