如何从mySQL表中获取每个user_id的2个随机行?

时间:2015-09-25 20:54:10

标签: mysql

我的桌子有很多来自不同span[normalize-space(text())='Log In']/parent::a 的产品。像这样:

user_id

我正在尝试为每个不同的user_id准确地获取2行,随机排序。

我最接近的是这个查询:

product_id | user_id
01           20
02           20
03           20
04           20
05           32
06           32
07           53
08           53
09           53
10           84
11           84
etc.

但是这给了我随机排序的每一行,而不是每个随机排序的user_id的两行。

我尝试了SELECT * FROM db_products ORDER BY user_id, RAND() ,但总共只显示了2行。实现这一目标的最简单方法是什么?

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用变量:

select p.*
from (select p.*,
             (@rn := if(@u = user_id, @rn + 1,
                        if(@u := user_id, 1, 1)
                       )
             ) as rn
      from db_products p cross join
           (select @u := 0, @rn := 0) params
      order by user_id, rand()
     ) p
where rn <= 2;

还有其他可能性。如果您的字符串不太可能溢出,并且您希望产品在一行中:

select user_id,
       substring_index(group_concat(product_id order by rand(), ',', 2)
from db_products
group by user_id;