CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

关于从数据库中调用随机数据的问题,谢谢先!

楼主weinierxing(一根火柴)2005-05-11 13:01:06 在 Web 开发 / ASP 提问

关于从数据库中调用随机数据的问题,谢谢先!  
   
  请问大侠,我想从数据库中调用10个随机数据,可以用SQL语句实现么??  
   
  谢谢!  
  问题点数:20、回复次数:61Top

1 楼weinierxing(一根火柴)回复于 2005-05-11 13:22:49 得分 0

怎么就没有人帮我呢???  
  郁闷哦~~~~~Top

2 楼weinierxing(一根火柴)回复于 2005-05-11 18:07:21 得分 0

大家帮帮忙啊~~~我很急的~~~  
  谢谢了!!!Top

3 楼tigerhu76(虎虎)回复于 2005-05-11 19:04:57 得分 0

是从数据库中调用随机数,还是随机从数据库中调用数据?Top

4 楼xmq120(xmq120)回复于 2005-05-11 19:21:58 得分 0

简单啊~~~     把符合条件的记录读到   记录集中   然后用个随机数   在记录集中   随机抽Top

5 楼lawyu(雨淋漓)回复于 2005-05-11 19:32:10 得分 0

sql的where条件查询随机数不就行了Top

6 楼weinierxing(一根火柴)回复于 2005-05-11 20:21:22 得分 0

就是利用select   语句实现随机抽取数据Top

7 楼yirengirl(伊人)回复于 2005-05-11 20:24:57 得分 0

做个记号,我也想知道答案。Top

8 楼weinierxing(一根火柴)回复于 2005-05-11 20:26:59 得分 0

使用随机数抽取很麻烦,而且容易出现取不到数据的情况,  
  或者很难控制以取到预定数量的数据Top

9 楼weinierxing(一根火柴)回复于 2005-05-11 22:55:25 得分 0

请高手帮忙啊!!!Top

10 楼caobin518(linlin)回复于 2005-05-11 22:59:31 得分 0

例如:  
   
  select   top   10   *   from   [table]   where   id()Top

11 楼caobin518(linlin)回复于 2005-05-11 23:03:56 得分 0

收回我的话:  
   
  正确写法为:  
  select   top   10   *   from   [table]   order   by   newid()  
  或者  
  select   top   10   *   from   [table]   order   by   rand(id)Top

12 楼caobin518(linlin)回复于 2005-05-11 23:05:09 得分 0

记得给我分呀.我是穷人.哈::)Top

13 楼weinierxing(一根火柴)回复于 2005-05-11 23:27:51 得分 0

后面的条件  
  where   id()  
  就是表示随机抽取数据么???  
   
  我在使用下面的  
  order   by   newid()  
  的时候调试不能通过啊  
   
  例子  
  sql_select3="SELECT   TOP   "&gdjy_shuliang&"   *   FROM   "&take_name&"   where   nandu="&take_select3&"   ORDER   BY   NEWID()"  
   
  set   rs_select3=jiyiconn.execute(sql_select3)  
   
  Top

14 楼weinierxing(一根火柴)回复于 2005-05-11 23:30:16 得分 0

哈哈,我调试通过了,肯定给的啊,Top

15 楼weinierxing(一根火柴)回复于 2005-05-11 23:34:37 得分 0

select   top   10   *   from   [table]   order   by   newid()  
  或者  
  select   top   10   *   from   [table]   order   by   rand(id)  
   
   
  后面的参数  
  id  
  还需要修改么???Top

16 楼mkqiang(扬帆)回复于 2005-05-12 08:50:10 得分 0

做个记号,我也想知道答案Top

17 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 09:12:53 得分 0

sql   server  
  select   top   10   *   from   [table]   order   by   newid()  
  在access中可以用,在asp中用不了。  
  select   top   10   *   from   [table]   order   by   rnd(id)Top

18 楼caobin518(linlin)回复于 2005-05-12 09:30:54 得分 0

 
   
  select   top   10   *   from   [table]   order   by   rnd(id)  
   
  rnd为函数,id为字段  
  我测试已通过。  
  Top

19 楼caobin518(linlin)回复于 2005-05-12 09:50:05 得分 0

<%    
  randomize    
  for   i=1   to   3    
  rndtemp=rs.recordcount  
  curorrnd=cint((rndtemp-3+1)*Rnd()+1)  
  rs.move   curorrnd,1    
  response.write   "&rs("articleid")&""&rs("articletitle")&"<br>"    
  next    
  %>  
  这段也通过Top

20 楼jekexys2004(浪傲)回复于 2005-05-12 10:05:25 得分 1

你可以先写一个随机函数,生成10个ID,然后利用这10个id号去数据库中查找出来,如果没有就继续,直到10个数据。Top

21 楼caobin518(linlin)回复于 2005-05-12 10:09:27 得分 0

我觉得:   jekexys2004(浪傲)   说的不容易控制生成ID的范围Top

22 楼TSD(智之选,商欲达--智商购物系统zhishop.com)回复于 2005-05-12 10:12:50 得分 0

jekexys2004(浪傲)   的方法才实际可行!Top

23 楼jekexys2004(浪傲)回复于 2005-05-12 11:54:27 得分 0

当然前提是你的ID要有规律,最好是自动排序的Top

24 楼weinierxing(一根火柴)回复于 2005-05-12 12:19:19 得分 0

首先谢谢大家帮忙哦,呵呵!  
   
   
  jekexys2004(浪傲)的方法比较难控制  
  ID字段在数据库中是很难有什么规律的啊  
  而且代码相当繁琐的!  
   
  我以前用过一次这张方法,最终效果还不是很好的。  
   
  我用的是Access+asp+vbscript,难怪都不行的啊,真是郁闷啊!  
   
   
  select   top   10   *   from   [table]   order   by   rnd(id)  
  这句不能在asp中用?  
   
   
  我再试试下面的哦  
   
  <%    
  randomize    
  for   i=1   to   3    
  rndtemp=rs.recordcount  
  curorrnd=cint((rndtemp-3+1)*Rnd()+1)  
  rs.move   curorrnd,1    
  response.write   "&rs("articleid")&""&rs("articletitle")&"<br>"    
  next    
  %>  
  这段也通过  
  Top

25 楼weinierxing(一根火柴)回复于 2005-05-12 12:39:36 得分 0

要产生指定范围的随机整数,请使用以下公式:  
  Int((upperbound   -   lowerbound   +   1)   *   Rnd   +   lowerbound)  
  这里,   upperbound   是此范围的上界,而   lowerbound   是此范围内的下界。  
   
   
  问  
  caobin518()  
   
  <%    
  randomize    
  for   i=1   to   3                   
  rndtemp=rs.recordcount  
  curorrnd=cint((rndtemp-3+1)*Rnd()+1)           这句是什么意思啊,怎么不是cint(rndtemp*Rnd()+1)  
  rs.move   curorrnd,1    
  response.write   "&rs("articleid")&""&rs("articletitle")&"<br>"    
  next    
  %>  
   
  还有,如果碰到数据库中的空记录怎么处理啊?如何保证得到预设数量的记录呢?  
  数据存放的是没有什么规律的。  
  Top

26 楼jekexys2004(浪傲)回复于 2005-05-12 14:54:05 得分 0

还没解决?????????????Top

27 楼cheng17(+天空+)回复于 2005-05-12 15:53:49 得分 0

如果ID号不连续的话,有什么办法解决吗?  
  如ID号:1,3,4,5,9,10Top

28 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-12 16:29:51 得分 0

sql="select   top   10   *   from   product   order   by   rnd(unid)"  
  怎么不行,刚刚我都测试成功了  
  access+aspTop

29 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:34:04 得分 1

blog上不了,不然我的blog里有。。。Top

30 楼cheng17(+天空+)回复于 2005-05-12 16:36:38 得分 0

<%  
  set   rs=conn.execute("select   top   3   *   from   member   order   by   rnd(id)")  
  Do   while   not   rs.eof    
  if   rs.eof   then   exit   do  
  response.write   rs(0)&"<br>"  
  rs.movenext  
  Loop  
  %>  
  你刷新页面,出来的记录有变化吗?我这里是没有变化,还是第一次出来的记录Top

31 楼cheng17(+天空+)回复于 2005-05-12 16:39:29 得分 0

to:   lisoon((水翡草芥--突然想去扫街))    
   
  如果ID号不连续的话,你是用什么办法解决的呢?  
  如ID号:1,3,4,5,9,10  
  Top

32 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:50:07 得分 0

思路,先取出所有id,用随机方法,把id打乱,再用id   in(1,2,5,8)这样取数据。Top

33 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2005-05-12 16:53:45 得分 0

http://www.baidu.com/s?wd=%CB%E6%BB%FA%C8%A1%B3%F6n%CC%F5%CA%FD%BE%DD&cl=3  
   
  第一条记录便是,不是现在上不了。我也不知道我以前写放在哪了,找不到。。Top

34 楼cheng17(+天空+)回复于 2005-05-12 17:00:55 得分 0

嗯Top

35 楼poonzsp(怒放的生命)回复于 2005-05-12 17:56:08 得分 0

这样的话会有重复的ID`~Top

36 楼cheng17(+天空+)回复于 2005-05-12 18:10:40 得分 0

取出来的记录越多,而表中的记录又少,重复得最利害  
  如:取5条出来,而表中只有20条记录Top

37 楼weinierxing(一根火柴)回复于 2005-05-12 20:31:00 得分 0

谢谢了  
  sql="select   top   5   *   from   mytable   order   by   rnd(id)"  
  调试终于成功,但是.......  
   
  <%  
  set   conn=server.createobject("adodb.connection")  
  conn.connectionstring=connectme  
  conn.open  
  set   rs=server.createobject("adodb.recordset")  
  sql="select   top   5   *   from   mytable   order   by   rnd(id)"  
  set   rs=conn.execute(sql)  
   
  for   i=1   to   5  
  xx=xx&rs("city_name")&"<br>"  
  response.write(xx)  
  next  
   
  %>  
   
  不知道为什么,接收的数据数目不对啊,郁闷,还是请高手帮忙啊,谢谢了Top

38 楼cqq(脑电波)回复于 2005-05-12 21:09:46 得分 0

oracle   里面狠方便的,   sql   server的不清楚Top

39 楼weinierxing(一根火柴)回复于 2005-05-12 21:15:25 得分 0

晕哦,我都快结束了,还改,我更不懂了,哈哈Top

40 楼poonzsp(怒放的生命)回复于 2005-05-13 08:59:26 得分 0

<%  
  set   conn=server.createobject("adodb.connection")  
  conn.connectionstring=connectme  
  conn.open  
  set   rs=server.createobject("adodb.recordset")  
  sql="select   top   5   *   from   mytable   order   by   rnd(id)"  
  set   rs=conn.execute(sql)  
   
  Do   Until   rs.eof  
  xx=xx&rs("city_name")&"<br>"  
  response.write(xx)  
  rs.MoveNext  
  Loop  
  %>  
  Top

41 楼poonzsp(怒放的生命)回复于 2005-05-13 09:11:54 得分 0

to     cheng17(+天空+(http://ertl.51baby.cn))    
   
  天空说说防止重复的WAY`~Top

42 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 09:44:38 得分 0

想到了一个方法~~    
   
  上面的思路都限制在确定的ID里面  
  其实我们可以用移动指针的方式  
  sql="......"  
  set   rs=server.createobject("adodb.recordset")  
  rs.open   sql,conn,1,1  
  rs.movefirst  
  randomize  
  for   i=1   to   10       '取十条记录  
  curorrnd=Int((max-min+1)*Rnd()+min))       '每次移动的范围max到min之间  
  rst.move   curorrnd,1    
  response.write   ""  
  next    
   
  我想这可以达到楼住的要求,效率应该比上面的差  
  只是这样要根据记录的多少控制没次移动的位数Top

43 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 09:49:08 得分 0

不好意思     上面掉了一个不字,效率应该不差Top

44 楼poonzsp(怒放的生命)回复于 2005-05-13 09:57:00 得分 0

上面的方法不行`~Top

45 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:02:14 得分 0

怎么不行??你测试过吗??  
  我刚刚试过了,可以得到想要的记录Top

46 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:03:28 得分 0

注意  
  移动到指定的位置rs.move,此方法必须配合recordset对象Open方法的cursortype参数一起使用(cursortype参数不可以使用adopenforwardonly的参数值)  
   
  recordset.move   numrecords,start  
   
  numrecords   表示将要移动的数据条数,为正表示往下移动,为负表示向上移动  
  start   表示指针移动基准点(0、以当前为基准     1、以第一条为基准     2、以最后一条为基准)  
  Top

47 楼satans18((何畏)(只要你过得比我好))回复于 2005-05-13 10:13:33 得分 2

sql="select     *   from   mytable   order   by   id   desc"  
  set   rs=server.createobject("adodb.recordset")  
  rs.open   sql,conn,1,3  
  if   rs.eof   and   rs.bof   then  
    response.write   "没有记录"  
  else  
   
  i=10       '需要取出的记录数  
  min=0     '移动范围  
  max=int(rs.recordcount/10)     '这样就能保证移动是游标不会越界  
   
  rs.movefirst  
  randomize  
  for   i=1   to   i       '取十条记录  
  curorrnd=Int((max-min+1)*Rnd()+min))       '每次移动的范围max到min之间  
  rst.move   curorrnd,1    
  if   rs.eof   then   exit   for  
  response.write   ""  
  next  
   
  end   ifTop

48 楼weinierxing(一根火柴)回复于 2005-05-13 12:59:51 得分 0

poonzsp(不以物喜·不以己悲)原帖:  
   
  <%  
  set   conn=server.createobject("adodb.connection")  
  conn.connectionstring=connectme  
  conn.open  
  set   rs=server.createobject("adodb.recordset")  
  sql="select   top   5   *   from   mytable   order   by   rnd(id)"  
  set   rs=conn.execute(sql)  
   
  Do   Until   rs.eof  
  xx=xx&rs("city_name")&"<br>"  
  response.write(xx)  
  rs.MoveNext  
  Loop  
  %>  
   
  为什么我接收到的数目是15个呢??真是晕了啊!高人,你那没有差错么?  
  代码一样的啊!!!  
   
  Top

49 楼weinierxing(一根火柴)回复于 2005-05-13 13:14:54 得分 0

satans18(只要你过得比我好|satan)原帖:  
   
   
  想到了一个方法~~    
   
  上面的思路都限制在确定的ID里面  
  其实我们可以用移动指针的方式  
  sql="......"  
  set   rs=server.createobject("adodb.recordset")  
  rs.open   sql,conn,1,1  
  rs.movefirst  
  randomize  
  for   i=1   to   10       '取十条记录  
  curorrnd=Int((max-min+1)*Rnd()+min))       '每次移动的范围max到min之间  
  rst.move   curorrnd,1    
  response.write   ""  
  next    
   
  我想这可以达到楼住的要求,效率应该比上面的差  
  只是这样要根据记录的多少控制没次移动的位数  
   
   
   
  这种方法好像不行的,如果记录是空的,怎么办?数量又怎么保证啊?Top

50 楼sunshift(http://www.56390.com/)回复于 2005-05-13 13:28:27 得分 0

没有想到这贴这么火热····  
  SQL我知道:  
   
  select   top   10   *   from   [table_name]   order   by   newid()  
   
  ACCESS没有试过;  
  Top

51 楼weinierxing(一根火柴)回复于 2005-05-13 17:59:54 得分 0

回楼上的,在ACCESS中是不行的!  
   
  我的帖子还没有人回呢啊,快啊,谢谢先!!!Top

52 楼caobin518(linlin)回复于 2005-05-13 22:50:59 得分 8

刚才睡不着就来上网.还是看到这个问题!而且我的回答糟到别人的否定.  
   
  明天上班后我就帮你测试一下.上午10点前发出来.Top

53 楼weinierxing(一根火柴)回复于 2005-05-13 23:20:33 得分 0

好的,谢谢了,我一直在等的啊!!!!Top

54 楼yurui(夏天到了)回复于 2005-05-14 00:51:26 得分 2

<%  
  set   rs=server.createobject("adodb.recordset")    
  sql="select   *   from   sp"    
  rs.open   sql,conn,1,1    
  '取得记录总数  
  count=rs.recordcount    
  '产生一随机数  
  Randomize    
  'inew   =   Int((count   *   Rnd)   +   1)    
  inew   =   Int(count   *   Rnd)  
  '移动记录指针,取得记录  
  rs.move   inew    
  %>  
   
  。。。。。  
  <%  
  rs("id")  
  rs("product")  
  %>  
  。。。。。  
   
  <%    
  rs.moveFirst  
  Randomize    
  inew   =   Int(count   *   Rnd)    
  rs.move   inew  
  %>Top

55 楼weinierxing(一根火柴)回复于 2005-05-14 01:04:26 得分 0

回楼上的,  
  你的方法也不是很好的,  
  我的记录不是有规律的,而且会有很多空记录在里面的  
  比如,id,  
  id 就是不连续的,中间也有很多空的,  
  代码运行可能有问题的,就算考虑了,也是很难得到预定的记录数目的。  
   
  还是谢谢回帖了,哈哈Top

56 楼weinierxing(一根火柴)回复于 2005-05-14 20:24:47 得分 0

自己再顶一下,谁能帮我哦!!!Top

57 楼caobin518(linlin)回复于 2005-05-14 21:57:03 得分 0

设定不一个字段不为空不就行了。或者定一个主键!Top

58 楼tree_stone(pretty_stone)回复于 2005-05-14 23:51:35 得分 6

这是我写的与你的问题相关的代码,希望对你有参考价值,从10道题中生成5道随机题目,可以完全没有重复题号!!!    
  '生成随机试卷的单项选择题  
          response.write("<br>一.   <b>单选择</b>(每题"&singleper&"分,共"&singlecount&"题)<br>")  
  dim   seed()  
  redim   seed(singlecount-1)  
  for   i=0   to   (singlecount-1)  
  seed(i)=timer+i  
  next  
  for   i=0   to   (singlecount-1)  
  'TitleSql="select   *   from   "&exam_db&"   where   mark=0   and   grade='"&grade&"'   and   type='单选题'"  
  TitleSql="select   *   from   "&exam_db&"   where   grade='"&grade&"'   and   type='单选题'"  
  set   rs=server.CreateObject("ADODB.recordset")  
  rs.open   TitleSql,conn,1,1  
  count=rs.recordcount  
          '生成随机题目,randomize初始化随机数生成器,该生成器具有基于系统计时器的种子.生成的随机数范围是[0,(rs.recordcount-1)].  
  randomize(seed(i))  
  temp=int(((count-1)-0+1)*Rnd+0)  
  '把rs的当前位置移动到指定记录temp.  
  if   not   rs.eof   then  
  rs.move   temp  
  'rs("mark")=1  
  response.write(   (i+1)&".   "&rs("question")&"<br>")  
          %>  
  <input   type="radio"   name="DanXuan<%=rs("id")%>"   value="A">   A.   <%=rs("text1")%>  
  <br><input   type="radio"   name="DanXuan<%=rs("id")%>"   value="B">   B.   <%=rs("text2")%>  
  <br><input   type="radio"   name="DanXuan<%=rs("id")%>"   value="C">   C.   <%=rs("text3")%>  
  <br><input   type="radio"   name="DanXuan<%=rs("id")%>"   value="D">   D.   <%=rs("text4")%>  
  <br>  
      <%  
      end   if  
      next  
      %>  
  <%Top

59 楼weinierxing(一根火柴)回复于 2005-05-15 20:04:20 得分 0

satans18(只要你过得比我好|satan)原帖:  
   
   
  sql="select     *   from   mytable   order   by   id   desc"  
  set   rs=server.createobject("adodb.recordset")  
  rs.open   sql,conn,1,3  
  if   rs.eof   and   rs.bof   then  
    response.write   "没有记录"  
  else  
   
  i=10       '需要取出的记录数  
  min=0     '移动范围  
  max=int(rs.recordcount/10)     '这样就能保证移动是游标不会越界  
   
  rs.movefirst  
  randomize  
  for   i=1   to   i       '取十条记录  
  curorrnd=Int((max-min+1)*Rnd()+min))       '每次移动的范围max到min之间  
  rst.move   curorrnd,1    
  if   rs.eof   then   exit   for  
  response.write   ""  
  next  
   
  end   if  
   
   
   
  高人你试了没有啊,我只能得到一个数据啊,郁闷哦,我的一个问题到现在都没有搞定啊~~~~~~  
   
  谁能解救我啊!!!!!  
  最好是调试能通过的啊!谢谢了!!!Top

60 楼weinierxing(一根火柴)回复于 2005-05-15 20:57:26 得分 0

搞定了,采用了  
  tree_stone(pretty_stone)    
  的方法  
   
  使用预先生成不同随机数的方法  
   
  order   by   rnd(id)方法还是没有通过,  
  不过还是结帖先了!  
   
  只有20分,没有想到有这么多朋友相助,真是十分感谢  
  还有,没有给分的朋友,我还是同样的谢谢你们!Top

61 楼weinierxing(一根火柴)回复于 2005-05-15 21:01:57 得分 0

晕了,结不了贴了啊  
  怎么办啊??Top

相关问题

  • 数据库调用
  • 调用数据库问题
  • 调用数据库问题
  • asp调用数据库(acess2000)
  • VB数据库随机读取数据
  • jsp中用jdbc调用oracle数据库
  • asp如何调用sybase数据库
  • 怎么使用vb调用数据库!
  • 用ADO调用SYBASE数据库
  • 如何建立和调用数据库?

关键词

  • 数据库
  • 数据
  • 移动
  • 字段
  • 代码
  • 指针
  • 测试
  • 记录
  • 随机
  • 谢谢

得分解答快速导航

  • 帖主:weinierxing
  • jekexys2004
  • lisoon
  • satans18
  • caobin518
  • yurui
  • tree_stone

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo