2012-09-21 44 views
0

我有许多记录,其中featured?属性。如何通过先存在的布尔属性排序结果

我想查询所有,将它们分为特色和非特色,如果可能,将它们在它们的组之间随机分组(随机显示特色组,然后随机选择其余组)。

任何想法如何在ActiveRecord上做到这一点?

+0

我想你可能会先由兰德()排序列表随机化列表,然后按特色属性排序。 –

回答

3

使用rand()

MySQL的

SELECT * FROM <TABLE_NAME> ORDER BY featured?, rand() 

钢轨3

ModelName.order("featured, rand()") 

对于防爆: -

id featured 
1  true 
2  false 
3  false 
4  true 
5  false 
6  true 

我希望所有的特色与价值真正的第一,然后FALS E,但是订单的记录withing真假组应该是随机的

所以我的代码将

User.order("featured DESC, rand()") 

和O生成/ p是(注: - 的组真实的记录顺序/假可以改变)

id featured 
4  true 
6  true 
1  true 
5  false 
3  false 
2  false 
+0

我不明白你的样本'order(“featured ?, rand()”)'可以工作。你能详细说明一下吗? – Martin

+0

检查我编辑的答案也不要使用以'?'结尾的列:ref: - https://github.com/sferik/rails_admin/issues/490 – Salil

+0

'User.order(“featured,rand()”)''没有回到真正的第一个和最后的。其实'User.order(“featured,rand()”)。first'返回一个带有'featured的对象?返回FALSE。 – Martin