选择显示字体大小

mysql如何从表中取出随机数据

原来都想用php的实现随机,但取出多条好像要进行两次以上查询.最近我从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);

-> 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的集合的随机样本。注意在一个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.*以上才支持这样的子查询.



  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons