1

我正在使用 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

这有可能吗?

我还必须注意,我不能在表格中添加优先级列或类似的列,因为“事件”部分将动态生成。

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

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

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

4

2 回答 2

2

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

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

就是你要找的。

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

于 2013-01-09T10:32:57.310 回答
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
于 2013-01-09T10:28:07.310 回答