mysql 随机获取一条或多条数据

若要在i ≤r≤ j 这个范围得到一个随机整数r ,需要用到表达式 FLOOR( RAND() * (j – i)+i),RLOOR()取整树部分,RAND()、ROUND(x,n)四舍五入取整,ROUND(x,n)表示随机生成一个 0~x 之间的n位小数的数字。

例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:

SELECT  FLOOR(RAND()*(12-7)+7)

从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法。

随机获得Mysql数据表的一条或多条记录有很多方法,下面以users(userId,userName,password……)表,百多万条以上记录为例:

1、常规使用方法

SELECT * FROM  users  ORDER BY RAND() LIMIT 1

结论:效率最慢,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低!

2、SELECT * FROM users AS U0

JOIN

(SELECT FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM user AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3)) AS userid ) AS U4

ON U0.userid>= U4.userid

LIMIT 1

结论:随机一条数据效率还行,多条就不行

3、通过sql获得最大值和最小值,然后通过php的rand生成一个随机数randnum,再通过SELECT * FROM users WHERE userId >= randnum LIMIT 1

SELECT * FROM users WHERE

users.userid>= FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM user AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3))

ORDER BY users.userid ASC

LIMIT 1

结论:随机取一条或多条记录,方法都不错! (最佳方案)

附:field(column,value1,value2,value3,……) 代表根据column列自定义的顺序排

原文地址:https://www.cnblogs.com/zwesy/p/9095008.html

时间: 2024-11-08 18:20:46

mysql 随机获取一条或多条数据的相关文章

mysql随机查询符合条件的几条记录

随机查询,方法可以有很多种.比如,查询出所有记录,然后随机从列表中取n条记录.使用程序便可实现.可是程序实现必须查询出所有符合条件的记录(至少是所有符合条件的记录id),然后再随机取出n个id,查询数据库.但是效率毕竟没有数据库中直接查询得快.下面介绍mysql中怎样随机查询n条记录. 1.最简单的办法order by rand(),示例 select * from question q where q.`level`=1 order by rand() limit 1; 此写法,可以将查询出的

MySQL随机获取数据的方法,支持大数据量

最近做项目,需要做一个从mysql数据库中随机取几条数据出来. 总所周知,order by rand 会死人的..因为本人对大数据量方面的只是了解的很少,无解,去找百度老师..搜索结果千篇一律.特发到这里来,供大家学习. 在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY ran

mysql随机获取一条或者多条数据

原文地址:http://www.im286.com/thread-7091552-1-1.html 转来备份 研究一些随机的因素,主要是讲究效率问题. 语句一: select * from users order by rand() LIMIT 1 MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切忌使用. ---------分隔线---------------------

MySql实现随机获取表中的一条数据

本以为这是一个很复杂的功能,没想到mysql有这个语法 SELECT * FROM sys_randcode ORDER BY RAND() LIMIT 1

mysql随机获取十条数据

SELECT * FROM tablename ORDER BY RAND() LIMIT 10

js从数组中随机获取n个不重复的数据

做云课堂的作业时遇到一要求,实现刷新页面时显示不同数据,(数组中20个据,页面加载10个).思路就是从0-19中随机生成10个不同的数,让数组取下标输出数据. 下面是在num的范围内生成n个不重复的数.例如从10以内随机生成5个不同的数randomNum(10,5); function randomNum(num,n) { if(typeof num!=="number"||typeof n!=="number") return false; //对象检测 var

随机获取Mysql数据表的一条或多条记录

随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被

从SQLSERVER/MYSQL数据库中随机取一条或者N条记录

原文:从SQLSERVER/MYSQL数据库中随机取一条或者N条记录 从SQLSERVER/MYSQL数据库中随机取一条或者N条记录 很多人都知道使用rand()函数但是怎麽使用可能不是每个人都知道 建立测试表 USE [sss] GO CREATE TABLE RANDTEST(ID INT DEFAULT RAND()*100,NAME NVARCHAR(200) DEFAULT 'nihao') GO CREATE INDEX IX_RANDTEST_ID ON RANDTEST(ID)

PHP如何实现在数据库随机获取几条记录

本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法.PHP实例分享给大家供大家参考,具体如下: 为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法的吗?又不是大数据开发,分析. 今天偶然想起来一个坑爹数据,如:PHP取百万条数据中随机20条记录,当时就用的算法. 1.先统计统计数据库多少条记录(这个做个数据缓存,如1小时重新统计一次), 2.根据总条数,随机1次,1次性取出20条记录(当然这个就相当于分页了,要求不高的话,这个最快,我用的就是