MySQL取出随机数据

2016-02-19 10:53 6 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐MySQL取出随机数据,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.

翻了手册,找到了下面这个语句,可以完成任务了,但效率较低

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

rand在手册里是这么说的:
RAND() 
RAND(N) 
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 
mysql select RAND();
        - 0.5925
mysql select RAND(20);
        - 0.1811
mysql select RAND(20);
        - 0.1811
mysql select RAND();
        - 0.2079
mysql select RAND();
        - 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND cd ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。 

但我试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些

后来请教了google,得到如下代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
SELECT *  FROM table_name AS r1 JOIN (SELECT ROUND(RAND() *(SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id = r2.id ORDER BY r1.id ASC LIMIT 5; 

执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询. 

下面是其它网友的补充:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

select id from  zhyx_items   order by rand()  这样效率太低了

优化sql语句之后:

SELECT t1.id FROM zhyx_items AS t1 JOIN (SELECT ROUND(RAND() *((SELECT MAX(id) FROM zhyx_items)-(SELECT MIN(id) FROM zhyx_items))+(SELECT MIN(id) FROM zhyx_items)) AS id) AS t2 WHERE t1.id = t2.id ORDER BY t1.id LIMIT 0,5;

来源:http://www.tulaoshi.com/n/20160219/1596013.html

延伸阅读
标签: MySQL mysql数据库
以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了。 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() ,RAND(N) :返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指...
标签: excel
在Excel 2007中如何简单地生成随机数据呢?   在Excel 2007中用函数轻松生成随机数据 这个函数就是 RandBetwween(bottom,top),表示生成从bottom到top之间的随机整数。 我们在Excel工作表的单元格中输入=RandBetwween(10,100)(不包括引号)。 图示:Excel会自动给出提示 回车,这个单元格中就出现了一个10...
代码如下: // 随机数加密算法  A^B = C , A^C =B , B^C = A 异或加密  // Etual  2011-3-14  #include stdio.h  // 7byte 数据 和 1byte key  unsigned char code_buf[8] = {0x12,0x13,0x14,0x15,0x21,0x22,0x23,0x00};  void print_buf(void)  {      int i;   &n...
标签: 电脑入门
①启动Excel2007,在单元格输入=ran,下面就会出现3个函数选择,我们选择第二项randbetween。 ②选择好了之后,会出现函数参数的使用。 ③我们输入10,100表示随机生成10-100之间的自然数。 ④回车,即可产生一个数。 ⑤利用单元格填充的方法可以快速完成多个单元格随机数字的填充。
代码如下: #include iostream #include stdio.h #include set using namespace std; int main() {     int n,a,i;     setintm;     while(scanf("%d",&n)!=EOF)     {         for(i=0;in;i++)      ...

经验教程

107

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部