四种数据库,取随机记录的方法
发表于:2007-07-02来源:作者:点击数:
标签:
mysql:select * from tablename order by rand() limit 10 sqlserver :select top 10 * from tablename order by NEWID() ORACLE:使用dbmsrandomvalue的一种方法 SQLselect*from(select*fromtorderbydbms_random.value)whererownum10; A ---------- 39 10
mysql:select * from tablename order by rand() limit 10
sqlserver:select top 10 * from tablename order by NEWID()
ORACLE:使用 dbms random value的一种方法
SQL> select *from (select *from t order by dbms_random.value) where rownum<10;
A ---------- 39 101 134 5 83 97 96 140 81
已选择9行。
SQL> select *from (select *from t order by dbms_random.value) where rownum<10;
A ---------- 27 118 141 103 128 10 142 68 74 有人说这是一种效率最差的方法,恳请告知比这更好的
解决方案!
ACCESS(一):
yourstr="*1*3*4*6*12*...."sql="select top 10 * form yourdb where instr(@#*@#&id&@#*@#,@#"&yourstr&"@#)<>0
ACCESS(二):
<% n=10 @#@#取任意10条记录 set rs = server.CreateObject ("adodb.recordset") sql = "select * from table" rs.open sql,conn,1,1 count=rs.recordcount @#@#记录总数 IF Count<>empty Then Randomize for i = 1 to n @#@#循环n次 num=Fix(Rnd*count) @#@#num便是随机产生的记录行数,用Fix(),使其不会大于count值。 rs.move num @#@#移到改随机行 Response.write rs(0) @#@#出该条记录 rs.movefirst @#@#别忘了再把指针移到第一条 next End IF rs.close set rs = nothing%>
SQL> select *from (select *from t order by dbms_random.value) where rownum<10;
A ---------- 39 101 134 5 83 97 96 140 81
已选择9行。
SQL> select *from (select *from t order by dbms_random.value) where rownum<10;
A ---------- 27 118 141 103 128 10 142 68 74 有人说这是一种效率最差的方法,恳请告知比这更好的解决方案!
ACCESS(一):
yourstr="*1*3*4*6*12*...."sql="select top 10 * form yourdb where instr(@#*@#&id&@#*@#,@#"&yourstr&"@#)<>0
ACCESS(二):
<% n=10 @#@#取任意10条记录 set rs = server.CreateObject ("adodb.recordset") sql = "select * from table" rs.open sql,conn,1,1 count=rs.recordcount @#@#记录总数 IF Count<>empty Then Randomize for i = 1 to n @#@#循环n次 num=Fix(Rnd*count) @#@#num便是随机产生的记录行数,用Fix(),使其不会大于count值。 rs.move num @#@#移到改随机行 Response.write rs(0) @#@#出该条记录 rs.movefirst @#@#别忘了再把指针移到第一条 next End IF rs.close set rs = nothing%>
原文转自:http://www.ltesting.net