![](/img/trans.png)
[英]Get random data from each category with different limit for each category php-mysql
[英]MySQL Group by category limit N from each category
表
id title category
1 hello1 1
2 hello2 2
3 hello3 1
询问
select *
from videos
where category in
(
select category
from videos
group by
category
having
count(*) < 3
ORDER BY RAND()
)
我的目标是从每个类别中以随机顺序获得2个标题,我也想以此方式获取记录
category1
title1
title2
category2
title1
title2
以下查询提供每个类别最多两个随机行:
SELECT title, category
FROM (
SELECT v.*,
if( category = @last_cat,
if( @last_cat:=category, @x:=@x+1,@x:=@x+1),
if( @last_cat:=category, @x:=0,@x:=0)
) x
FROM (SELECT @last_cat:=-9876, @x:=-91234) x,
(SELECT * FROM videos ORDER BY category, rand()) v
) x
WHERE x < 2
更新
请尝试以下更新查询( SQL Fiddle - http : //sqlfiddle.com/#!2/de35bb /9):
select videos.*
from videos
where
(
select COUNT(vid.id)
from videos AS vid
WHERE videos.category = vid.category
) <= 2
ORDER BY
videos.category, RAND()
我设法在这里找到解决方案: 在GROUP BY中使用LIMIT以每个组获得N个结果? 其中答案指向文章“ 如何在SQL中选择每个组的第一/最小/最大行” ,作者描述了执行此任务的几种技术。 上面的查询基于第二篇文章中提供的示例,但是还有其他形式的解决此问题的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.