MySQL中取随机数据的方法

1.用MySQL的JOIN方法
此种方式获取随机数据的优点是速度非常快,缺点是获取的id是连续的,倒是有个办法可以解决,比如你最终要获得10条随机数据,可以先随机获取500条数据,将这500条数据保存到数组中,然后再从数组中随机取得10条数据,这样也比ORDER BY RAND()效率高很多。

经测试,此种方法效率最高,推荐使用。

Select * FROM `metadata_default` AS t1 JOIN (Select ROUND(RAND() * (Select MAX(songid) FROM `metadata_default`)) AS songid) AS t2 Where t1.songid >= t2.songid orDER BY t1.songid ASC LIMIT 10;

songid    songname    specialname    hot    songid
32630    songname32630    specialname32630    46274    32630
32631    songname32631    specialname32631    96120    32630
32632    songname32632    specialname32632    82781    32630
32633    songname32633    specialname32633    5141    32630
32634    songname32634    specialname32634    25062    32630
32635    songname32635    specialname32635    32488    32630
32636    songname32636    specialname32636    32635    32630
32637    songname32637    specialname32637    74850    32630
32638    songname32638    specialname32638    58139    32630
32639    songname32639    specialname32639    17843    32630

(10 row(s) returned)
Execution Time : 00:00:00:016
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:016

2.用MySQL的ORDER BY RAND()方法
用此种方法程度比较慢,不推荐使用,看看执行的时间对比就知道了。

Select songid,songname,specialname FROM metadata_default orDER BY RAND() LIMIT 10;
(10 row(s) returned)

songid    songname    specialname
39468    songname39468    specialname39468
45512    songname45512    specialname45512
27961    songname27961    specialname27961
144342    songname144342    specialname144342
42228    songname42228    specialname42228
22060    songname22060    specialname22060
172200    songname172200    specialname172200
78342    songname78342    specialname78342
45674    songname45674    specialname45674
7154    songname7154    specialname7154

Execution Time : 00:00:01:172
Transfer Time  : 00:00:00:000
Total Time     : 00:00:01:172

3.自定义方法
取出数据库中id的最小值与最大值
Select MIN(songid),MAX(songid) FROM metadata_default;

然后求最小值与最大值之间的随机数
for ($i = 0; $i < 10; $i++) {
    $songids[] = mt_rand($min, $max);
}
$songids = implode(',', $songids);

最后从数据库中查询出结果
Select songid,songname,specialname FROM metadata_default Where songid IN($songids);



上一篇: PHP中addslashes及stripslashes的用法
下一篇: PHP中memory_get_usage的用法
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: mysql
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1865
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑