使用时如何获取随机记录:group?
@paintings = Painting.all(:group => "user_id", :order => "created_at DESC")
这给了我每个用户的最新画作。现在我想从每个用户中选择一个随机绘画,而不是最新的。绘画的顺序应该仍然相同,以便最活跃的用户将首先显示他/她的随机绘画。
painting150(user1)
painting200(user2)
painting231(user3)
这可能吗?
祝你好运。 AsbjørnMorell。
答案 0 :(得分:1)
这个答案特定于Rails,但由于你使用的是ActiveRecord,我认为应该没问题。
unique_paintings = []
@paintings.group_by(&:user_id).each do |user_id, paintings|
unique_paintings << paintings[rand(paintings.size-1)]
end
unique_paintings.sort_by(&:created_at)
group_by肯定会弄乱你在查询中所做的created_at排序,所以我做了一个sort_by作为最后一步。您可能希望在查询中删除它,因为无论如何您都必须这样做。
答案 1 :(得分:0)
@painting = @paintings[rand(@paintings.size-1)]
(或painting.count,还不知道正确的方法)
答案 2 :(得分:0)
假设你有MySQL,你可以尝试:
@paintings = Painting.all(:group => "user_id", :order => "RAND()")
答案 3 :(得分:0)
你可以做这样的事情,但随着记录数量的增长会受到影响
@paintings = Painting.find(:all, :order => 'RAND()').map{ |i| i.user_id }.uniq