Mysql 我可以按预定顺序加载ActiveRecord对象吗?
可以这样构造一个作用域吗Mysql 我可以按预定顺序加载ActiveRecord对象吗?,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,可以这样构造一个作用域吗 User.where(:id => [5,4,3,2,7,1000] ) 在某种程度上,那 a) 结果按传递的ID的顺序排列。(这是一个简单的部分,因为您可以加载记录,并相应地对结果进行排序) b) 结果不是一个数组,而是一个作用域本身(棘手的部分;) 更新:只在MySQL上工作的解决方案是受欢迎的。不同的数据库以不同的方式保存它们的数据,因此没有人能够确定数据的范围 但是,如果您真的要挑战这个问题,为什么不使用原始SQL,请选择每个元组并将其与union合并,
User.where(:id => [5,4,3,2,7,1000] )
在某种程度上,那
a) 结果按传递的ID的顺序排列。(这是一个简单的部分,因为您可以加载记录,并相应地对结果进行排序)
b) 结果不是一个数组,而是一个作用域本身(棘手的部分;)
更新:只在MySQL上工作的解决方案是受欢迎的。不同的数据库以不同的方式保存它们的数据,因此没有人能够确定数据的范围
但是,如果您真的要挑战这个问题,为什么不使用原始SQL,请选择每个元组并将其与union合并,同时构造一个长SQL查询。我可以想出两种方法: (1) 在数据库中放入订单列 (2) 使用原始SQL和自定义ORDER BY子句,如下所示:
order by (
case id
when 5 then 0
when 4 then 1
when 3 then 2
when 2 then 3
when 7 then 4
when 1000 then 5
end
)
我不确定它的便携性。哪个数据库?mysql具有按字段排序的功能。你想要一个可移植的解决方案吗?解决方案(2)在MySQL和SQLite3中工作。。。对我来说已经够好了!