MySQL中取随机数据的方法
作者:admin 日期:2012-04-07
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中memory_get_usage的用法
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: mysql
相关日志:
广告位