加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL数据库MySQL取出随机数据

发布时间:2020-12-12 02:26:19 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL数据库MySQL取出随机数据》要点: 本文介绍了MYSQL数据库MySQL取出随机数据,希望对您有用。如果有疑问,可以联系我们。 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了,但效率较低 SEL

《MYSQL数据库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,得到如下代码

MYSQL入门

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.*以上才支持这样的子查询.?
MYSQL入门

下面是其它网友的补充:MYSQL入门

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

优化sql语句之后:MYSQL入门

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;

《MYSQL数据库MySQL取出随机数据》是否对您有启发,欢迎查看更多与《MYSQL数据库MySQL取出随机数据》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读