0

我正在尝试制作一个测验程序,该程序将从 MySQL 数据库中获取问题及其选择,并将它们显示为用户填写的表格。用户(在填写所有字段后)将提交。这里没有评分,答案只是用该用户的注册 ID 存储在数据库中(这是因为有些答案是开放的,即:用户必须亲自输入答案,因此稍后将对此进行评估)。

我的表的结构是(我将发布创建查询,因为表看起来扭曲且难以阅读):

表1:这包含q_id(每个问题都有一个唯一的ID),question(实际问题),quiz_id(这个问题所属的quiz的id;有多个quizzes!),active(一个简单的“y”或“n”字段,检查此问题是否处于活动状态。如果不是,则问题不会添加到表单中),然后键入('c' 表示单选,'m' 表示多项选择,'o' 表示打开/用户文本输入)

CREATE  TABLE `db_test`.`insr_questions` (
  `q_id` INT(10) NOT NULL AUTO_INCREMENT ,
  `question` VARCHAR(255) NOT NULL ,
  `quiz_id` MEDIUMINT(8) UNSIGNED NOT NULL ,
  `active` CHAR(1) NOT NULL ,
  `type` CHAR(1) NOT NULL ,
  PRIMARY KEY (`id`) );

表 2:这包含字段a_id(这是答案选项的唯一 ID)、choice(这是实际的答案选项)、question_id(这是这些答案选项所属的问题 ID)和active(这是同上)

 CREATE  TABLE `db_test`.`insr_answers` (
  `a_id` INT(10) NOT NULL AUTO_INCREMENT ,
  `choice` VARCHAR(75) NOT NULL ,
  `question_id` MEDIUMINT(8) UNSIGNED NOT NULL ,
  `active` CHAR(1) NOT NULL ,
  PRIMARY KEY (`id`) );

所以这里的想法是检索一个quiz_id,然后深入问题表,检索所有属于该 quiz_id 的问题,然后取每个问题,并检索所有属于该 question_id 的答案。然后这些必须以 php 形式显示。

非常感谢任何正确方向的指针!

(我目前正在阅读可以完成此操作的不同方式,作为 php 的新手,所以我将在这个问题中添加我正在处理的任何其他代码!)

4

2 回答 2

0

阅读JOINS in MySQL,这样您就可以一口气得到问题和答案:

SELECT * FROM insr_questions q 
LEFT JOIN insr_answers a ON q.q_id = a.question_id 
WHERE q.active = 1 AND q.quiz_id = 0

然后使用 mysql_fetch_array 循环遍历结果。(注意我使用了表别名 q 和 a,这减少了打字并且用于 quiz_id 一个任意数字)

于 2013-09-05T07:54:24.587 回答
0

使用以下算法完成问题:

Begin Loop (i from 0 to count(questions) )
  Create TextArea
  Textarea.Value = Question[i]
  Get count(answers) for Question[i]
  Get Type of Answer
  Case(c)
    Begin Loop (n from 0 to count(answers) )
      Create Radio Button[n]
      Radiobutton[n].Value = Choice[n]
    End Loop
  Case(m)
    Begin Loop (n from 0 to count(answers) )
      Create Checkbox[n]
      Checkbox[n].Value = Choice[n]
    End Loop
  Case(o)
    Create TextArea
  End Case
End Loop   
于 2013-09-06T14:13:19.133 回答