发现:用where in查询后,记录集原来不是按照in后面内容的顺序排列!

ztt918zx 2015-05-05 02:52:30
编写一个随机抽题的考试系统,发现sql中按照where in的方式取得的记录集不是按照where in后面的选择列表顺序排列,如何解决,还请各位高人指点,谢谢!!!!积善之家必有余庆!!!

简单来说,就是
sql="select * from question1 where id in('5','3','1')"
我希望记录集的顺序是5 3 1
但是实际情况是1,3,5


抽题.asp
sql="select top 100 * from question1 where  type='单选题' order by NewID()   
'实现随机抽取题目的sql语句
.....
for i=1 to 100
......‘打印试题
strid1=strid1 & rs("ID") & "," ’记录随机抽取的每道题题号
rs.movenext
......
next


改卷.asp

id1=split(str1,",")
sql="select answer from question1 where id in("+str1+")"
'经测试,str1中存放着随机抽取的题号,比如5,3,6,10,...
'本希望记录集的顺序是按照str1中存放的随机id来显示的
rs.open sql,conn,1,1
rs.movefirst
‘下面判分改卷

经过检查,rs记录集中没有按照预期估计的5,3,6,10,...的随机抽取的题号作为顺序显示的,而是按照1,2,3,...100的顺序显示,这样的话,就会造成改卷时题号字段(随机)和答案字段(顺序)对不上的问题了,请问这种问题怎么解决呢?谢谢
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztt918zx 2015-05-05
  • 打赏
  • 举报
回复
自己解决 sql="select * from question1 where id in("+str1+")order by charindex(','+rtrim(cast(id as varchar(10)))+',',',"+str1+",') "
ztt918zx 2015-05-05
  • 打赏
  • 举报
回复
在网上查了,可以使用FIND_IN_SET解决,select * from talbe where id in(3,2,4,1) ORDER BY FIND_IN_SET( id, '3,2,4,1') 但是sql server中没有这个函数,如何解决呢?
ztt918zx 2015-05-05
  • 打赏
  • 举报
回复
可否使用sql .......order by 字符串或数组的方式来解决呢

28,402

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧