是否可以在一个查询中更新以下数据?
ID Seq
2 2
1 4
4 1
3 3
最好是使用rails活动记录来完成,否则使用sql查询也会非常好。
这样做的原因是我需要根据ajax请求频繁更新一组ID。我相信在单个查询中完成它会更加优化。
答案 0 :(得分:1)
我猜你是在询问是否可以在一次交易中完成更新。
在rails中,您可以使用ActiveRecord::Base.transaction来实现此目的。例如,对于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
答案 1 :(得分: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);")
答案 2 :(得分: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("','")}') "