作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
是否可以使用 ActiveRecord 的 update_all 函数来创建一个 MySQL 查询:
UPDATE `key_value_store`
SET `key` =
CASE `key`
WHEN 'xxxxxxx' THEN 'yyyyyyyy'
WHEN 'zzzzzzz' THEN 'wwwwwwww'
...
END
WHERE `key` IN ('some key', 'some other key', ...)
LIMIT 1000
我现在拥有的是
keys = ['some key', 'some other key', ...]
Keyvaluemodel.where(:key => keys).limit(1000).update_all()
所以真正的问题是,什么代码放在 update_all 括号中以便此更新按照我想要的方式工作?
最佳答案
除非您编写一些原始 SQL 或自定义查询,否则这是不可能的。但考虑到您只有两种情况,编写两个查询就足够容易了。
如果you look at the docs您会看到 update_all
接受的唯一参数是 SQL 查询的 SET
部分。
updates - A string, array, or hash representing the SET part of an SQL statement.
因此,要么编写自定义查询,要么将更新拆分为多个查询,每个查询对应一个 CASE
。
Model.where(key: key_1).limit(1000).update_all(key: new_key)
Model.where(key: key_2).limit(1000).update_all(key: new_key)
关于mysql - 带有 CASE 和 WHEN 的 Ruby update_all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673851/
我是一名优秀的程序员,十分优秀!