时间: 2021-08-13 作者:daque
往日在群里计划过这个题目,比拟的有道理.mysql的语法真好玩.她们从来都想用php的实行随机,但掏出多条犹如要举行两次之上查问.翻了画册,找到了底下这个语句,不妨实行工作了 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.*之上才扶助如许的子查问.