mysql随机排序(mysql 随机io)
本篇文章给大家谈谈mysql随机排序,以及mysql 随机io对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、mysql语句既要从大到小排列,又要随机获取怎么做的??有谁遇到过吗?
- 2、mysql里有没有象SQL server中newid()这样的函数?
- 3、mysql 分组后随机取3条,不够的全部取出来,应该怎么写?
mysql语句既要从大到小排列,又要随机获取怎么做的??有谁遇到过吗?
sql语句:select * from table_name where id=round(rand()*10) order by id desc limit 0,6
注:可以根据你id值的范围调节where条件中随机数值的范围。
这是最简单的方式,不过这个方法可能存在一个问题,就是产生的随机数可能重复,比如随机数出现2次或多次数字3,这样结果中就会有重复的记录。通过sql语句本身如何解决这个问题拍锋搭暂时没想到,这样就只能用另一种方法:先在程基判序中生成袭拿6个不重复的随机数(具体操作比如每个随机数生成出来保存之前先跟之前的所有数比较一下,不重复才保存,重复就重新生成一个),然后再生成sql语句:select * from table_name where id in (1,2,3,4,5,6) order by id desc ;
[img]mysql里有没有象SQL server中newid()这样的函数?
newid()在sqlserver中用于随机桐橘穗排序,在mysql中可用rand()表示。
可通过以下数据进行测试:
创建表及插入数据:
create table test
(id int);
insert into test values (1);
insert into test values (2);
insert into test values (3);
insert into test values (4);
insert into test values (5);
insert into test values (6);
insert into test values 局卜(7);
insert into test values (8);
insert into test values (9);
执行语句:
select * from test order by rand();
第一次执行结果:
第二次执行结果:
结论:这样试伍裤验了两次,每次的排序是不同的,也就证明实现了要求的随机排序。
mysql 分组后随机取3条,不够的全部取出来,应该怎么写?
我这里给你一个 类似的例子, 表结构也就是简单的 分类, 明细.
要查询每个分类下面, 随机明细 几条的情况.
你可以参考参考.
测试表与测试数据。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)
SELECT
group_code,
`name`
FROM
(
SELECT
CASE
WHEN @cn != group_code THEN @rownum:= 1
ELSE @rownum:= @rownum + 1
END AS No,
group_code,
@cn := group_code AS group_code1,
name
FROM
(SELECT @rownum:=0) r,
(SELECT @cn:= '') p,
关于mysql随机排序和mysql 随机io的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。