你的需求
建议使用 InnoDB 类型表,
它是一个事务安全型表处理器为了实现随机取前二十条语句你可以使用SELECT Q_id,Title,... FROM `questions` ORDER BY RAND() LIMIT 20;
这样也可以避免老师将第 10 题删除的类似情况,为了实现随机取出的是不重复的记录,
思路如下:在 questions 表中为每个记录加一个字段 用于记录是否已被使用,
读取了该记录后就立即将其设置标志因而用 InnoDB 表进行事务处理是最佳方案了,读取记录时使用 FOR UPDATE 来进行记录锁定BEGIN;
SELECT Q_id,Title,... FROM `questions` ORDER BY RAND() LIMIT 20 FOR UPDATE;
.....
.....
.....
COMMIT;InnoDB 中文参考手册
http://expert.csdn.net/Expert/TopicView1.asp?id=1415869

解决方案 »

  1.   

    首先谢谢你的热心帮助,使我重新有了编码的思路和方向。
    不过通过记录标记来实现不重复取题是不行的,因为不重复只是相对这一次取题而言,题库是要多次被取题的。
    再次谢谢你,我现在开始学习InnoDB
      

  2.   

    呵呵,
    不是要记录每个学生所答过的题嘛,
    进行双表 LEFT JOIN 
    在 WHERE 子句中加入判断