您的位置:首页 > 数据库

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

2005-03-03 09:08 399 查看
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
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息