做网站我们更专业,服务我们更用心----厦门优艾网络工作室
建站热线:135~1596~4500

ASP实现:用一条SQL得到Access数据库中的随机记录集!

12/20/2005 11:02:54 AM 来源: 作者: 浏览热度( 次) 字号:T|T
分享到:

今天要做从试题库中随机抽出10题显示在首页上,在网上找了很多文章,试了都没成功,最后总算找到用一条SQL得到Access数据库中的随机记录集的方法了。

有一条是各大网站都有的:

select top 50 * from someTable order by NewID()

这个只能用于MS SQL数据库,而access数据库没有NEWID()这个函数所以不行。

还有这些都是不行的:

方法一:有人用如下代码以记录总数为极大值来首先提取出指定数量的随机数,然后以这些随机数做为记录ID。

dim n,j
dim su()
dim a,b,k
b=myrs.RecordCount
Randomize
redim su(index_N)
su(1)=Int((b * Rnd) + 1)
for n=2 to index_N
  a=Int((b * Rnd) + 1)
  for j=1 to n
      do while a=su(j)
          a=Int((b* Rnd) + 1)
          j=1         
      loop
  next
  su(n)=a
next

这种方式有一些问题,就是当ID不是连续的话,有可能某些随机数不存在ID序列当中。另外ID的最大值与总的记录值不一定相等,这样有些记录ID会永远被忽略。

方法二:有人采用一条SQL语句解决此问题
select top 50 * from table order by int(rand()*50)
如果这条语句可行的话是个不错的方法。我测试这条语句并没有通过,如果有人知道是哪有问题请告诉我,非常感谢。

方法三:有这样一种也不行,我测试没通过。

yourstr="*1*3*4*6*12*...."
sql="select top 10 * form yourdb where instr(''*''&id&''*'',''"&yourstr&"'')<>0"

下面讲正确方法:

Randomize
sq="SELECT TOP 10 [content] FROM [T1] ORDER BY rnd(-(id+" & rnd() & "))")

用这个就可以实现用一条SQL得到Access数据库中的随机记录集!

一定要记的在sql语句前加Randomize

实例请看首页最新考题。

就这样就行了,不用那么复杂
SELECT top 50 * FROM 表 ORDER BY Rnd(id)

返回】 【关闭