我正在使用IN query搜索记录,如下所示:
Event.where("events.id IN (#{events.nil? ? '' : events.collect(&:id).join(',')})")
产生如下输出:
SELECT "events".* FROM "events" WHERE (events.id IN (143,169,139,48,172,146,145,124,111,49,108,18,113,144)) AND (status = 'live') LIMIT 10
但是,默认情况下,这将按update_进行排序。我想按查询中的排序。我的意思是我希望这是它返回的顺序:
143,169,139,48,172,146,145,124,111,49,108,18,113,144
有可能吗?
我还必须注意,由于“events”部分是动态生成的,所以不能添加优先级列或类似于表的列。
我在这里发现了一个非常相似的问题:
Postgres ORDER BY values in IN list using Rails Active Record
请随意把我的这张标为复制品
最佳答案
这是Rails,所以使用Rails的方法进行数据库查询。我相信:
Event.where(:id => events.map(&:id)).order(:id)
就是你要找的。
如果
events
已经是数据库记录的集合,那么.where(:id => events)
也可以工作。关于sql - Rails Postgres定制订购,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14233039/