Postgres ORDER BY in 列表中的值使用 Rails Active Record



我收到一个按"收入"排序的用户ID列表(一次大约1000个)。我在"我的系统数据库"中有用户记录,但"收入"列不存在。我想从"我的系统数据库"中检索用户在列表中收到的排序顺序中。我尝试使用活动记录执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用。

//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})

我在下面的链接中找到了类似问题的答案,但不确定如何使用活动记录实施建议的解决方案。

按输入值列表排序

还有其他方法可以做到吗?

请指导。

沙杜尔。

你链接到答案提供了你需要的东西,你只需要以灵活的方式用 Ruby 编码它。

像这样:

class User
  def self.find_as_sorted(ids)
    values = []
    ids.each_with_index do |id, index|
      values << "(#{id}, #{index + 1})"
    end
    relation = self.joins("JOIN (VALUES #{values.join(",")}) as x (id, ordering) ON #{table_name}.id = x.id")
    relation = relation.order('x.ordering')
    relation
  end
end

实际上,您可以轻松地将其放入模块中,并将其混合到任何需要它的ActiveRecord类中,因为它使用table_name并且self它没有使用任何特定的类名实现。

MySQL用户可以通过FIELD函数做到这一点,但Postgres缺乏它。但是,这个问题有解决方法:在Postgresql中模拟MySQL的ORDER BY FIELD()

相关内容

  • 没有找到相关文章

最新更新