我的桌子有很多来自不同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行。实现这一目标的最简单方法是什么?
非常感谢您的帮助:)
答案 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;