|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
通过支付一定费用,客户可以得到优先的24/7支持,访问内容丰富的在线知识库和联系一个专门的技术负责经理。 之前在群里会商过这个成绩,对照的成心思.MySQL的语法真好玩.他们本来都想用php的完成随机,但掏出多条仿佛要举行两次以上查询.翻了手册,找到了上面这个语句,能够完成义务了。
SELECT*FROMtable_nameORDERBYrand()LIMIT5;
rand在手册里是这么说的:
RAND()
RAND(N)
前往在局限0到1.0内的随机浮点值。假如一个整数参数N被指定,它被用作种子值。
mysql>selectRAND();
->0.5925
mysql>selectRAND(20);
->0.1811
mysql>selectRAND(20);
->0.1811
mysql>selectRAND();
->0.2079
mysql>selectRAND();
->0.7888
你不克不及在一个ORDERBY子句用RAND()值利用列,由于ORDERBY将反复盘算列屡次。但是在MySQL3.23中,你能够做:SELECT*FROMtable_nameORDERBYRAND(),这是有益于失掉一个来自SELECT*FROMtable1,table2WHEREa=bANDc<dORDERBYRAND()LIMIT1000的汇合的随机样本。注重在一个WHERE子句里的一个RAND()将在每次WHERE被实行时从头评价。
但我试了一下,8千笔记录的表,实行一次必要0.08sec,.慢了些
厥后就教了google,失掉以下代码
SELECT*
FROMtable_nameASr1JOIN
(SELECTROUND(RAND()*
(SELECTMAX(id)
FROMtable_name))ASid)
ASr2
WHEREr1.id>=r2.id
ORDERBYr1.idASC
LIMIT5;
实行效力必要0.02sec.惋惜的是,只要mysql4.1.*以上才撑持如许的子查询.
即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。 |
|