考试类项目,通过SQL语句实现进行随机组卷的功能以及其他类似随机相关的业务

    在进行考试相关项目的开发时,由于初次接触该类的业务的开发,就考虑这个功能怎么实现,起初很容易就能想到Java中有可以产生随机数的方法,其思路也是相当的简单,把需要的题目全部取出来,再给他们一个额外的属性并将Java中生成随机数的方法产生的数值赋给这个属性,再给他们进行一个排序,按需取靠前或者靠后的那些题目来进行组卷,这个思路很简单就能想到,但是总感觉怪怪的,这种方法题库中若一百道题,从结果上来看肯定时没问题的,但是若是上千道题目上万道题目呢?还把所有题目都取出来么,不麻烦么,服务器受的了么,为啥不从数据库层面进行操作呢?

我们来设计个简单的SQL语句来模拟这个场景

数据库很抱歉当初设计的是自增的,现在再使用雪花算法有的为时过晚了,项目经验真的真的很重要啊!!!

举个例子:从题库中随机取五道题来进行组卷

 select * from question order by RAND() limit 5;

查询结果

    从结果上还是蛮让人满意的

我们来看看 ’ Rand() ’ 这个函数有什么作用?是如何实现?

select *,RAND() '随机数' from question order by RAND();

查询结果

    可以看到Rand()该函数在0 - 1之间产生了不重复的小数,由于order by 的作用使得查询结果从小到大排列,
看到这基本就能明白随机组卷的功能大概怎么实现了,只要把试题id所在的表在SQL语句的最末尾处加上order by rand() 就能获得一个通过 ’排序‘ 产生的结果,即随机从某题库所属抽取试题,并且是乱序排列的查询结果。

最后简单的介绍SQL语句中的这个 ’ Rand() ’ 函数

    SQL Server中有一个数学函数RAND,她可以返回一个介于0 到1(不包括0和1)之间的伪随机float值。我们先看看RAND函数的语法结构:
RAND ( [ seed ] )
    非常简单,包含一个可选参数seed,该参数可为RAND函数预设种子, 对于指定的种子值,返回的结果始终相同。如果没有设置种子值,则系统会自动随机为RAND函数指定一个种子值。为了返回的数据够随机,我们一般不使用该参数。
    看其产生随机数的小数点位数,这个应该是够随机了,况且比从数据库全部取出来在再使用Java函数产生随机数方便对了,或许存在某个大佬编写的插件能一行代实现,其底层肯定不止一行。

本篇博客纯属记录作用

考试项目,通过SQL语句实现随机进行组卷功能相关推荐

  1. 数据库三级考试真题 SQL语句查询真题汇总

    数据库三级考试真题 SQL语句查询真题汇总 SQL语句查询 //(1)检索至少借了5本书的同学的借书证号.姓名.系名和借书数量.(5分) select LOANS.借书证号,姓名,系名,count(* ...

  2. 高效便捷组卷功能,学练考一体化让考试更轻松

    在线考试系统是很多企业甚至企事业单位想要搭建的平台,无论是平时内部考试考核还是定期的员工培训都需要用到线上考试系统.尤其现在线上考试系统和培训功能挂钩,学练考一体化平台对于使用者来说是更加方便的. 而 ...

  3. c语言将注释和语句分离,C语言组卷系统中重复题问题研究

    C语言组卷系统中重复题问题研究 作者:陈星 李郴 来源:电脑知识与技术 201801期 时间:2018-06-02 摘要:在一套试卷中,重复题问题是影响考试质量的一个重要因素.该文针對C语言试卷中选择 ...

  4. 项目中SQL语句文件保存及提取方法

    第十九章 SQL文保存方法 @http://blog.csdn.net/struts2/article/details/1745050 在开发JavaWeb应用程序的过程中可能经常需要使用到SQL语句 ...

  5. 项目中SQL语句的一些应用总结

    [前言] 纵观项目的开发,当项目框架搭建起来之后,更多的功能是无非是根据业务来操控SQL语句,针对每个开发来说SQL语句是个基本功,是避不开的. 当然SQL语句也挺有意思,通过它也能尽情的展示我们的才 ...

  6. SQL语句你会写了吗?一题教你轻松对付数据库期末考试(写SQL语句的分必拿哦)

    现有下列几个表,按题目要求写出相关的SQL语句 第一部分: # 1. 查询所在城市为"北京"的所有工程号和工程名. select JNO,JNAME from j where CI ...

  7. springboot项目中sql语句出错排除错误方法

    方法一: 在application.properties中加一句 逐步走,出错的sql语句就会打印在控制台上. //在application.properties中加一句 mybatis.config ...

  8. java考试系统中自动组卷功能的核心逻辑实现

    /** * 自动组卷 *  * @param request * @param response * @param out * @throws IOException * @throws Servle ...

  9. 二级计算机vf里的sql,计算机二级考试vf常用sql语句

    计算机二级vf考试常用查询语句格式 1. 插入数据 格式1 全部字段 insert into 客户表 values ('003','张海山',10000,'北京') 部分字段 insert into ...

最新文章

  1. OkHttpClient源码分析(一)—— 同步、异步请求分析和Dispatcher的任务调度
  2. leetcode算法题--字符串相乘
  3. sklearn学习总结(超全面)
  4. php pg connect,pg_connect
  5. postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
  6. 【css】文字溢出,显示省略符号(...)
  7. Working with FBX SDK (2)
  8. Vmware下CentOs7 桥接模式下配置固定IP
  9. [SHELL]监控LINUX目录文件变化
  10. 错误记录(三)identity和assigned 的区别
  11. javacript 布尔型
  12. CG Rendering v.s. Browser Rendering
  13. python 请求头_Python爬虫:将headers请求头字符串转为字典
  14. Find n‘th number in a number system with only 3 and 4
  15. 基于python+qt5考研倒计时器
  16. linux编程 定时器,Linux 定时器编程
  17. linux下重装显卡驱动
  18. element环境插件
  19. 关于网络口碑研究小组
  20. PC USB Warning

热门文章

  1. 关于激活Windows10专业版2018长期服务版(神坑的小白一键重装系统)
  2. 两种启动模式安装windows操作系统
  3. oracle的sql if函数的使用方法,oracle基本sql语句和函数详解
  4. UI设计的20个原则
  5. Android UI设计原则
  6. nuxt使用axios配置拦截器
  7. 【C++】小猫钓鱼纸牌游戏--C++实现
  8. 基于Canal的MySQL=>ES数据同步方案
  9. 使用zlib库解压文件
  10. Object-C Target-Action模式 回调