mysql 分组后随机取3条,不够的全部取出来,应该怎么写?

mysql 分组后随机取3条,不够的全部取出来,应该怎么写?,第1张

我这里给你一个 类似的例子, 表结构也就是简单的 分类, 明细.要查询每个分类下面, 随机明细 几条的情况.你可以参考参考.测试表与测试数据。CREATE TABLE test_order_by_rand (group_code varchar(10), name varchar(10))INSERT INTO test_order_by_rand VALUES('水果', '苹果')INSERT INTO test_order_by_rand VALUES('水果', '梨子')INSERT INTO test_order_by_rand VALUES('水果', '香蕉')INSERT INTO test_order_by_rand VALUES('水果', '桃子')INSERT INTO test_order_by_rand VALUES('水果', '菠萝')INSERT INTO test_order_by_rand VALUES('蔬菜', '萝卜')INSERT INTO test_order_by_rand VALUES('蔬菜', '白菜')INSERT INTO test_order_by_rand VALUES('蔬菜', '蘑菇')INSERT INTO test_order_by_rand VALUES('蔬菜', '毛豆')INSERT INTO test_order_by_rand VALUES('蔬菜', '青椒')INSERT INTO test_order_by_rand VALUES('坚果', '核桃')INSERT INTO test_order_by_rand VALUES('坚果', '榛子')INSERT INTO test_order_by_rand VALUES('坚果', '杏仁')INSERT INTO test_order_by_rand VALUES('坚果', '花生')INSERT INTO test_order_by_rand VALUES('坚果', '开心果')预期目标, 按照 group_code 进行分组, 每个分组内, 进行随机获取数据.SELECT group_code, nameFROM(SELECT CASE WHEN @cn != group_code THEN @rownum:= 1 ELSE @rownum:= @rownum + 1 END AS No, group_code, @cn := group_code AS group_code, nameFROM (SELECT @rownum:=0) r, (SELECT @cn:= '') p, (SELECT * FROM test_order_by_rand order by group_code, rand()) tmp) subQueryWHERE No <= 3ORDER BY group_code这里套了2层子查询, 其中的(SELECT * FROM test_order_by_rand order by group_code, rand()) tmp 用于实现, 针对每一个 group_code 进行分组, 下属的 name 的数据, 进行随机排序其中的(......) subQuery用于实现, 针对 前面的 按 group_code 分组, name 随机排序后的数据。模拟一个 row_number() over(partition by group_code) 的处理最后的 No <= 3 用于限制, 每一个 group_code 下面, 显示多少行.执行结果:+------------+--------+| group_code | name |+------------+--------+| 水果 | 苹果 || 水果 | 香蕉 || 水果 | 梨子 || 蔬菜 | 青椒 || 蔬菜 | 白菜 || 蔬菜 | 蘑菇 || 坚果 | 核桃 || 坚果 | 花生 || 坚果 | 开心果 |+------------+--------+9 rows in set (0.00 sec)SELECTgroup_code,`name`FROM(SELECTCASEWHEN @cn != group_code THEN @rownum:= 1ELSE @rownum:= @rownum + 1END AS No,group_code,@cn := group_code AS group_code1,nameFROM(SELECT @rownum:=0) r,(SELECT @cn:= '') p,

从mysql数据库表中随机获取数据 其实,从数据库随机获取数据,很简单,只须用到一个rand()函数select * from table_name order by rand() limit 0,5下面是一个小实例:从文章表中随机获取5条数据。$dblink=mysql_connect("localhost","root","123456")mysql_query("set names utf8")mysql_select_db("aixuexi") $sql="select * from waxx_article order by rand() limit 0,5" $rs=mysql_query($sql) while($row=mysql_fetch_array($rs)){$rows[]=$row } if($rows){foreach($rows as $v){?><div style="width:350pxheight:35pxline-height:35pxborder:1px solid #ccc"><?php echo $v['title']?></div><?php} }else{ echo "暂无文章" }

随机读取可用newid(),取一条可用top 1

举例:如在表test中随机抽取一条未被读取的数据,执行语句为:

select?top?1?*?from?test?order?by?newid()第一次执行结果:

第二次执行结果:

结论:两次执行结果有可能一样,也有可能不一样,也就是实现了随机的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6101921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存