MySQL实现表中取出随机数据

mysql|数据|随机

 以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.他们原来都想用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 c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。

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

  后来请教了google,得到如下代码
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.*以上才支持这样的子查询.

时间: 2024-09-28 00:02:31

MySQL实现表中取出随机数据的相关文章

从MySQL数据库表中取出随机数据的代码_php技巧

MySQL 如何从表中取出随机数据  以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND()  RAND(N)  返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  mysql> select RAND

MySQL 从表中取出随机数据

实现随机,从手册中找到了下面这个语句,可以完成任务: 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); -&

MySQL中从表中取出随机数据性能优化

最简的办法 rand() 函数实例  代码如下 复制代码 SELECT * FROM table_name ORDER BY rand() LIMIT 5; 花时间为 0.7888 如果这样在数据量大时就挂了 后来找到一个办法  代码如下 复制代码 SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.i

将mysql数据库表中的部分数据导入到oracle数据库中

问题描述 将mysql数据库表中的部分数据导入到oracle数据库中 有一个问题:需要将Mysql数据库表中的某些数据导入oracle数据库的表中,需要通过传递文件来实现.比如将mysql数据生成.sql文件,然后执行该文件就可以写入到oracle数据库中.希望各位高手给个思路,谢谢 解决方案 可以用sql命令把数据导出到文件,e然后再把文件导入数据库 解决方案二: 你自己思路不是已经很清晰了吗? or你的意思是需要定时自动导入? 自动导入的话 估计需要借助写个程序实现了 解决方案三: 你自己思

MySQL随机从表中取出数据sql语句

rand在手册里是这么说的: RAND() RAND(N) 例  代码如下 复制代码 SELECT * FROM table_name ORDER BY rand() LIMIT 5; 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  代码如下 复制代码 mysql> select RAND(); -> 0.5925 mysql> select RAND(20); -> 0.1811 mysql> select RAND(20); ->

从数据表中取出第n条到第m条的记录的方法

数据 从publish 表中取出第 n 条到第 m 条的记录: SELECT TOP m-n+1 * FROM publish WHERE (id NOT IN (SELECT TOP n-1 id FROM publish)) id 为publish 表的关键字

c# 服务-从一个表中取出对应的数据 插入到另外一个表结构相同的表中

问题描述 从一个表中取出对应的数据 插入到另外一个表结构相同的表中 C# 写一个服务程序实现功能如下: 有两个结构相同的表A和B 要实现 从表A中取出符合条件的数据 插入到表B中去 然后把A表中的数据删除 ,注明:数据量很大 保证数据顺利插入B表中并删除A表中的数据 保证各个环节不出错: 大伙有什么高招 请指点下

select-ibatis查出mysql数据库表中某字段为null的数据???怎么写动态sql

问题描述 ibatis查出mysql数据库表中某字段为null的数据???怎么写动态sql 例如 select * from test where name is null 这条sql 中 IS NULL 报错,不知道ibatis里该怎么写??? 解决方案 我竟然不知道你想表达什么 解决方案二: 这条sql报错,不知道怎么改进??? 解决方案三: select * from table where content is "" 解决方案四: 在数据库中null 也是个值 解决方案五: 我

jsp问题-JSP从mysql5.5 中取出的数据与中文比较问题。急!

问题描述 JSP从mysql5.5 中取出的数据与中文比较问题.急! 在mysql5.5中建立了一数据表tn1,其中一行的姓名值为:张三 JSP中执行如下两行 String s="select * from tn1 where xm='张三'"; ResultSet rs=db.executeQuery(s); 我把mysql数据库及数据表的字符集均设为gb2312,jsp网页中的pageEncoding也为gb2312,发现查询出的结果集为空,也就是比较条件式为假,不知问题出在哪里?