Rails postgres按自定义排序

时间:2013-01-09 10:23:20

标签: sql ruby-on-rails ruby postgresql

我正在使用IN查询搜索记录,如此:

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_at对其进行排序。我希望按查询的IN部分进行排序。我的意思是,我希望这是它返回的顺序:

143,169,139,48,172,146,145,124,111,49,108,18,113,144

这可能吗?

我还必须注意,我无法在表中添加优先级列或类似的"事件"部分将动态生成。

我刚刚在这里发现了一个非常相似的问题:

Postgres ORDER BY values in IN list using Rails Active Record

随意将我的这个标记为重复

2 个答案:

答案 0 :(得分:2)

这是Rails,所以使用Rails的方法进行数据库查询。我相信:

Event.where(:id => events.map(&:id)).order(:id)

是您正在寻找的。

如果events已经是数据库记录的集合,那么只有.where(:id => events)也可以。

答案 1 :(得分:0)

您是否尝试过订购?

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') 
ORDER BY events.id asc
LIMIT 10