Php 使用C++;

Php 使用C++;,php,c++,sql,Php,C++,Sql,我如何让这个代码片段在“目标”的值上增加10 如果我理解了这个问题,那么这应该是可行的,我不完全熟悉问题中使用的代码,但我觉得我理解您试图做什么 为什么不把它分成两个不同的MySQL查询呢。第一个在创建该记录时运行,第二个在更新该记录时运行。现在,因为我不太理解您的代码,我将只编写逻辑: If the record you are going to insert does not exist, then create it else if it does exist, get the curr

我如何让这个代码片段在“目标”的值上增加10


如果我理解了这个问题,那么这应该是可行的,我不完全熟悉问题中使用的代码,但我觉得我理解您试图做什么

为什么不把它分成两个不同的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知识回答了这个问题,所以我觉得我遗漏了一些东西,所以至少感谢您尝试一下这个想法,如果这真的不能回答问题,请告诉我。

这个:

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脚本中,它位于引号内。

首先,这是纯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
是唯一的索引或主键,它将触发重复键上的

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

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

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

我还想知道,如果创建了新记录,为什么不更新时间戳,但这不是你的问题所在

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

1) 在任何情况下,将
目标设置为新目标+10
这需要调整神秘缓冲区的内容,在新的目标值上增加10

您的代码将在没有其他修改的情况下工作

2) 将新记录的
goals
设置为新值,将旧记录的
goals设置为相同的新值+10
3) 将新记录的
goals
设置为新值,将旧记录的旧目标值增加10
由于我无法理解此查询的用途,我让您选择解决方案。

尝试
更新文件set goals=goals+10
我将在哪里添加该选项?还是你建议我换一只鹬?我需要它保持不变,只增加10个目标。类似于db_name(“目标”)+10+“=values(“这是正确的吗?您需要什么保持不变?整个代码块。我不确定在哪里添加您的建议。是的,尝试执行
db_name(“目标”)+10
当您设置值时。哇,首先让我对0x499602D2说声谢谢,非常感谢您让其他人来帮助我。其次,我想对所有试图帮助我的人说声谢谢,感谢这个奇妙的社区。只剩下374个字符……问题似乎不是sql查询,而是我事实上,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()
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()
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()