我正在使用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
随意将我的这个标记为重复
答案 0 :(得分:2)
这是Rails,所以使用Rails的方法进行数据库查询。我相信:
Event.where(:id => events.map(&:id)).order(:id)
是您正在寻找的。 p>
如果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