四种数据库,取随机记录的方法

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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

%>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有