有没有办法用Rails / Postgres以随机顺序获取记录但是先放置某些值?

时间:2017-01-25 23:47:20

标签: ruby-on-rails postgresql random

我有一个应用程序以随机​​顺序返回列表中的一堆记录,并带有一些分页。为此,我保存了种子值(以便刷新页面将再次以相同的顺序返回列表),然后使用.order('random()')

但是,假设在100条记录中,我有10条记录的preferred_level = 1,而所有其他90条记录都有preferred_level = 0

我是否可以通过某种方式将preferred_level = 1记录放在首位,但仍将所有内容随机化?

例如,我有[A,1],[X,0],[Y,0],[Z,0],[B,1],[C,1],[W,0],我希望我能找回像[B,1],[A,1],[C,1],[Z,0],[X,0],[Y,0],[W,0]这样的东西。

请注意,即使是preferred_level = 1的人也会随机化,只是他们来到所有0记录之前。从理论上讲,如果我要添加它们,我希望在preferred_level = 2记录之前放置1的任何解决方案。

------------

我曾希望它与Model.all.order('random()').order('preferred_level DESC')一样直观简单,但似乎并非如此。第二顺序似乎不会影响任何事情。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这使我在一个非常类似的问题上完成了工作。

select * from table order by preferred_level = 1 desc, random()

或者我猜Rails方式

Model.order('preferred_level = 1 desc, random()')