最近做了一个在线的考试系统,遇到从数据库表中随机抽取记录的问题,不知道该如何往下写,还望大虾们看到能指点一二。
数据库是用的Mysql
现在打算前台考卷能够随机从考试题目表(ExamProblem)中随机抽取N条记录,供前台使用。
要求最好能在数据库端完成随机操作,把记录全部导出到服务器端的思路暂不考虑。

解决方案 »

  1.   

    考试题目表(ExamProblem)中是否有唯一标识的字段,比如ID之类的
    SELECT * FROM tbl_name ORDER BY RAND() limit 10
      

  2.   

    ExamProblem表中是有主键的
    不过用你这个SQL语句,筛选数据
    好像跟主键ID就没多大关系了
    因为你这个是使用的每条记录隐藏的Rand来排序的
    不知道我理解的对不对
      

  3.   

    因为你随机抽取,所以自然不会再参照你的主键。与主键没什么关系了。rand是个产生随机数的函数。MySQL会比你的每条记录产生一个随机数,然后以些排序,这个序列自然是个随机的。然后取前N条。
      

  4.   

    因为有主键,至少主键不能重复,故记录不会有重复的,用RAND()抽取,
    不会有重复
      

  5.   

    ACMAIN_CHM 的思路我也曾经想过
    但这里有个问题是避免不了得
    这个表里的数据有可能会进行删除操作,也就是说有可能主键ID是间断的
    这样你程序生成的十个随机数是不是得先做一下数据表中是否有跟这十个随机数相等的ID值的判断
    这样每个随机数都需要对数据表遍历一遍
    这样做我想肯定是得不偿失的
      

  6.   

    没关系,你的PK字段即使断了。有主键就有索引可以利用。首先你知道表中记录的总数 100000
    然后通过程序得到 随机数 1654 则
    select * from yourTable order by pkCol limit 1654,1这样就行了。
      

  7.   

    呵呵
    ACMAIN_CHM就是厉害
    我只顾服务器端台随机数跟数据库ID想匹配了
    却忘记了还可以将随机数做为起始记录来做
    看来还是思维不够开阔啊
      

  8.   

    ACMAIN_CHM的方法 很强悍 非常值得使用!