Mysql 重复密钥更新时-添加到现有值

Mysql 重复密钥更新时-添加到现有值,mysql,sql,ruby,Mysql,Sql,Ruby,我有SQL(MySQL 5.x)查询,如: INSERT INTO table (val1), ON DUPLICATE KEY UPDATE `val1` = VALUES(`val1`) 这个很好用 现在我需要用一个值(val1)+ruby变量的总和来更新它 INSERT INTO table (val1), ON DUPLICATE KEY UPDATE `val1` = VALUES(`val1`)

我有SQL(MySQL 5.x)查询,如:

           INSERT INTO table (val1),
           ON DUPLICATE KEY UPDATE `val1` = VALUES(`val1`)
这个很好用

现在我需要用一个值(
val1
)+ruby变量的总和来更新它

           INSERT INTO table (val1),
           ON DUPLICATE KEY UPDATE `val1` = VALUES(`val1`) + #{ruby_variable}
给我一个错误

(这里的Ruby只是一个例子,实际上我需要求和值(
val1
)+integer)

如何做到这一点?

在顶部,您将看到一个您正试图做的事情的示例:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
所以你在找这个:

connection.execute(%Q{
    INSERT INTO table (val1) VALUES(#{connection.quote(x)})
    ON DUPLICATE KEY UPDATE `val1` = `val1` + #{connection.quote(ruby_variable)}
})

其中,
x
是您试图插入的内容,
ruby\u变量
是存在重复项时要添加到
val1
中的内容。插入时需要
,而不是复制时需要。

请提供更多上下文。你在写这封信吗?你用的是像Sequel这样的东西吗?给我们展示一个更大的背景和更多的细节。谢谢。好的,但是更大的上下文=>就是包含一些ruby代码的上下文?如何将该查询发送到数据库?完整的SQL查询只是一个开始,但我们需要了解SQL查询是如何在程序中构建的。请添加周围的代码和完整的错误消息。不要忘记在第二部分转义
ruby\u variable
。@tadman:谢谢,至少我第一次就得到了一个。当然,如果AR能像其他sane DB接口一样,降低态度,增加对
execute
的占位符支持,那就好了,这样我们就不必假装在1999年编写PHP,那时我们必须直接使用SQL。但是现在我开始咆哮了。我还没有看到一个很好的解释来解释为什么
sanitize\u sql
是一个受保护的方法。我总是要通过使用
send
或编写简单的类方法来正确地进行转义来解决这个问题。我也不知道你是否看过这里有PHP标签的东西,但如果问题和答案有任何暗示,那还是1999年。@tadman:“意识形态”是我能想到的唯一解释,同样愚蠢的原因是Rails仍然不理解FKs或CHECK约束。事实上,我在PHP中获得了铜牌,可惜PDO的使用并不普遍。