-1

是否可以在一个查询中更新以下数据?

ID             Seq
2               2
1               4
4               1
3               3 

如果可以使用 rails 活动记录来完成,那将是最好的,否则使用 sql 查询也可以。

这样做的原因是我有一个场景,我需要根据 ajax 请求频繁更新一组 id。我相信在单个查询中完成它会更加优化。

4

3 回答 3

1

我猜您是在问是否可以在单个事务中完成一组更新。

在 Rails 中,您可以为此目的使用ActiveRecord::Base.transaction 。例如,对于 a Model,您可以:

Model.transaction do
  Model.update(2, {:seq => 2} )
  Model.update(1, {:seq => 4} )
  Model.update(4, {:seq => 1} )
  Model.update(3, {:seq => 3} )
end
于 2012-08-09T03:13:21.847 回答
0

我们不能使用 Active Record 在单个查询中直接调用多个更新。正如你所说,我们可以在 Rails 中将其作为 sql 查询运行。

sql = ActiveRecord::Base.connection();

sql.execute("INSERT into products (id,name,description) VALUES (id-1,'name4','desc4'),(id-2,'name5','desc5'),(id-3,'name6','desc7') ON DUPLICATE KEY UPDATE name=VALUES(name),description=VALUES(description);")
于 2012-08-09T08:25:56.673 回答
0

从这里这里找到我想要的解决方案。

这就是我使用活动记录的方式。

_params = ["12", "9", "13", "14", "15", "16"]
db = ActiveRecord::Base.connection();

query = "UPDATE #{self.table_name} SET display_order = CASE id "       
_params.each_with_index do |d,i|
  query += sanitize_sql(["WHEN ? THEN ? ",d,i])
end

query += "END "
query += "WHERE id in ('#{_params.join("','")}') "
于 2012-08-10T03:23:51.843 回答