四种数据库,取随机记录的方法
四种数据库,取随机记录的方法 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
%>