我在选择两张不同用户的随机照片时遇到了麻烦......如果你能帮助我,那将是非常棒的。)
所以,让我说我自己的user_id = 1。我们也不需要那样。
表格看起来像这样:
|----------------------------|
| id | user_id | url | score |
|----------------------------|
| 1 | 1 | A | 15 |
| 2 | 1 | B | 5 |
| 3 | 2 | C | 1 |
| 4 | 2 | D | 51 |
| 5 | 2 | E | 2 |
| 6 | 2 | F | 9 |
| 7 | 3 | G | 7 |
| 8 | 3 | H | 3 |
| 9 | 3 | I | 88 |
| 10 | 4 | J | 15 |
| 11 | 4 | K | 0 |
| .. | ... | .. | ... |
|----------------------------|
因为我是用户1,所以我不必获取user_id = 1的行。
我需要另外两个用户的两个随机行。而那些行也不能是同一个用户。简而言之 - 不是我而不是其他2个相同的用户。
E.g。
| 5 | 2 | E | 2 |
| 8 | 3 | H | 3 |
or
| 8 | 3 | H | 3 |
| 11 | 4 | K | 0 |
or
| 10 | 4 | J | 15 |
| 3 | 2 | C | 1 |
SQL查询就可以了。但是,如果你能在Ruby on Rails ActiveRecord结构中提供它,那就太酷了。
编辑:
我尝试过:
@photos = Photo.order('RANDOM()').where.not(:user_id => current_user.id).limit(2).uniq(:user_id)
@photos = Photo.order('RANDOM()').where.not(:user_id => current_user.id).limit(2).distinct(:user_id)
@photos = Photo.distinct(:user_id).random(2)
@photos = Photo.uniq(:user_id).random(2)
P.S。 random()来自gem“randumb”。我认为没有什么大的影响。
编辑2:
这有效
@photos = []
@photo1 = Photo.order('RANDOM()').where.not(:user_id => current_user.id).first
@photo2 = Photo.order('RANDOM()').where.not(:user_id => current_user.id, :user_id => @photo1.user_id).first
@photos << @photo1 << @photo2
答案 0 :(得分:1)
首先,这将为您提供给定用户的随机图片
Photo.where("user_id = ?",<USER_ID>).shuffle.first
现在您需要2个不同的用户,这些用户不是当前用户
Photo.select("distinct user_id").where("user_id <> ?",<CURRENT_USER>).shuffle.first(2)
现在一举一动
@photos = []
unique_user_cnt = 2
Photo.select("distinct user_id").where("user_id <> ?",<CURRENT_USER>).shuffle.first(unique_user_cnt).each do |p|
@photos << Photo.where("user_id = ?",p.user_id).shuffle.first
end