将MySQL列成对转换为行

时间:2018-08-03 11:13:48

标签: mysql

我有一个MySQL数据库表,例如(附有示例屏幕截图,因为要在此处创建表的列很多)-

enter image description here

如上图所示,一个表qbank既有问题,也有选项(答案)。以前,这似乎是一种不错的方法,但是现在了解到,这并不是一种好的做法。因此,我为问题和选项(答案)创建了2个不同的表。我的answers表的结构类似于-

ID
question_id
answer
correct

但是我无法构建单个SQL查询,因为我可以将qbank表的列转换为answers表的类似内容-

+---------------+----------------------+
|Table_Answers  | Table_Qbank          |
+---------------+----------------------+
|ID             |  1                   |
+---------------+----------------------+
|question_id    | q_id (1)             |
+---------------+----------------------+
|answer_id      | option_01_text       |
+---------------+----------------------+
|correct        | option_01_is_correct |
+---------------+----------------------+
|ID             |  2                   |
+---------------+----------------------+
|question_id    | q_id (1)             |
+---------------+----------------------+
|answer_id      | option_02_text       |
+---------------+----------------------+
|correct        | option_02_is_correct |
+---------------+----------------------+

,即,如果第一个问题正确或不正确,则首先插入所有4个选项和值,然后类似地为其他问题行插入查询。

我可以使用PHP进行此工作,但是对于30000个问题行,我试图找到一种方法,可以自定义任何SQL查询以从PHPMyAdmin本身进行这项工作。

1 个答案:

答案 0 :(得分:0)

步骤1。修改架构设计。

这是规范化架构的示例:

questions
question_id, question
          1, What is the name of the current Prime Minister of India?
          2, What it the capital of India?

answers
answer_id, question_id, answer, is_correct
      101            1  Ram              0
      102            1  Shyam            1
      103            1  Kishan           0
      104            1  Mohan            0
      105            2  Jaipur           0
      106            2  Chennai          0
      107            2  Delhi            1
      108            2  Kolkata          0

或者,您可以简单地说第一个答案始终是正确的答案,而无需使用is_correct列,或者将正确答案的引用存储在单独的表中。