四種數據庫,取隨機記錄的方法

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
%>


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
%>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章