Foxtable(狐表)用户栏目专家坐堂 → 关于随机抽取记录问题


  共有1896人关注过本帖树形打印复制链接

主题:关于随机抽取记录问题

帅哥哟,离线,有人找我吗?
迷途小童
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:613 威望:0 精华:0 注册:2018/6/13 21:37:00
关于随机抽取记录问题  发帖心情 Post By:2019/12/10 21:37:00 [只看该作者]

假如在题库中抽取100个记录,其中50个是单选题,50个是多选,我想实现抽取20个单选,10个多选,如在单选题中抽取时遇到有2个问的题时,总抽选题数就少1个,保持问题总数为20个,如何实现,请各位专家老师,指点一下,谢谢

 

 

Dim cnt As Integer = DataTables("题库").DataRows.Count
Dim ids1 As New List(of Integer)
Dim ids2 As New List(of Integer)
For i As Integer = 0 To cnt -1
    ids1.add(i)
Next
For i As Integer = 0 To cnt - 1
    ids2.Add(ids1(rand.Next(0,ids1.count)))
Next
Tables("题库").StopRedraw()
DataTables("题库").ReplaceFor("选择",False)
For i As Integer = 0 To args(0) -1 '100为要抽取的行数
    DataTables("题库").DataRows(ids2(i))("选择") = True
    If Functions.Execute("Q_Number",DataTables("题库").DataRows(ids2(i))("题目内容"),"(?)" ) > 1 Then
     i += 1
    msgbox(i)
    End If   
Next
Tables("题库").Filter = "[选择] = True"
Tables("题库").ResumeRedraw()


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106005 积分:539112 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/10 21:56:00 [只看该作者]

之前已经说过了,这个是一种设计缺陷,使用起来会有很多的麻烦的。

抽取时遇到有2个问的题时就再抽一次,这一次不计入计数中

 回到顶部
帅哥哟,离线,有人找我吗?
迷途小童
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:613 威望:0 精华:0 注册:2018/6/13 21:37:00
  发帖心情 Post By:2019/12/11 10:30:00 [只看该作者]

我之前听取了你的建议,更改了表结构,原来是把有两个问的拆成两行,抽取时连续两条记录且顺序不能变你说有缺陷我调整了表结构。现在调整后有两个问题的还是保持一行记录,只是要在抽取的时候判断一下抽取的记录是否存在有两个问题,如有两个问我的就少抽取一行。这样也不能实现吗?


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106005 积分:539112 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/11 10:40:00 [只看该作者]

2个问的一般也应该是属于一道题吧?您这是当做2道题来用?那要先搞清楚业务模式,到底是当做一道题来使用,还是2道不同的题。如果说一定要分开成2道题使用,有时候还要合并到一起处理,只能说这题出的.....。这种情况不管使用哪种表结构类型都必须有额外的控制才行了。

您可以在函数里判断有几个问,然后返回同题问题数量解析计数。

 回到顶部
帅哥哟,离线,有人找我吗?
迷途小童
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:613 威望:0 精华:0 注册:2018/6/13 21:37:00
  发帖心情 Post By:2019/12/11 11:23:00 [只看该作者]

谢谢我实现了,我在选题时,来调整总结数量

'''
Dim cnt As Integer = DataTables("题库").DataRows.Count
Dim ids1 As New List(of Integer)
Dim ids2 As New List(of Integer)
For i As Integer = 0 To cnt -1
    ids1.add(i)
Next
For i As Integer = 0 To cnt - 1
    ids2.Add(ids1(rand.Next(0,ids1.count)))
Next
Tables("题库").StopRedraw()
'DataTables("题库").ReplaceFor("选择",False)
DataTables("题库").ReplaceFor("选题",False)
DataTables("题库").ReplaceFor("选择","")
Dim c As  Integer = 10
For i As Integer = 0 To c -1 '100为要抽取的行数
    DataTables("题库").DataRows(ids2(i))("选题") = True
    If Functions.Execute("Q_Number",DataTables("题库").DataRows(ids2(i))("题目内容"),"(?)" ) > 1 Then
     c -= 1
    'msgbox(i)
    End If   

Next
Tables("题库").Filter = "[选题] = True"
Tables("题库").ResumeRedraw()


 回到顶部