当前时间 加入收藏 设为首页 联系站长
先锋站长网
您的位置:>首页 -> 技术文章 -> MYSQL编程->MySQL 从表中取出随机数据
MySQL 从表中取出随机数据
来源: | 作者: | 时间:2008-03-18 21:36:10 | 录入者:admin

实现随机,从手册中找到了下面这个语句,可以完成任务:

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

[上一篇]mysql常识和基本操作 [下一篇]用MySQL创建数据库和数据库表
 评 论
称  呼:
内  容:
·本站发布内容均为客观表达作者观点,不代表本站立场,请勿攻击和漫骂
·网游发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
最新文章
站长先锋|先锋站长网 (17日)
企业邮局不断壮大 时代邮箱再.. (26日)
网店办照试行 无本经营亮剑何.. (20日)
CN域名年增长率达94.6% (14日)
解读:“.中国”域名幕后的争.. (14日)
后奥运时代互联网将刮繁体风 (11日)
IE8发布与“.中国”域名系统.. (04日)
抢滩WindowsServer2008 主机.. (28日)
“解百纳”千千结难解 .TM域.. (21日)
奥运商机刺激主机市场供求 (16日)
精彩推荐
站长先锋|先锋站长网 (17日)
企业邮局不断壮大 时代邮箱再添 (26日)
网店办照试行 无本经营亮剑何方 (20日)
CN域名年增长率达94.6% (14日)
解读:“.中国”域名幕后的争夺 (14日)
后奥运时代互联网将刮繁体风 (11日)
IE8发布与“.中国”域名系统启 (04日)
抢滩WindowsServer2008 主机商 (28日)
“解百纳”千千结难解 .TM域名 (21日)
观察:中小网站或渐成互联网主角 (14日)
热门咨询
Fs2You为您提供无限大小免费.. (28日)
用电子商务的网站进行信用卡.. (17日)
免费CN域名注册,每个人最多可.. (28日)
由站长论坛为您提供cn或者com.. (28日)
wap站长大全 (17日)
免费600提供600M免费ASP空间 (28日)
ASP如何获取客户端真实IP地址 (26日)
中国网络为注册会员免费赠送.. (28日)
地方分类信息网站推广重心! (16日)
如何编程删除access表中所有.. (22日)
联系方式:MSN:xFzz@hotmail.com QQ:486031、219741、54817814 电话:010-67216557
Copyright@xFzz.com all rights reserved 京ICP备05047353号
Powered by xFzz Code © 2003-07 bbs.xFzz.com