【问题标题】:Convert MySQL columns into rows with pair将 MySQL 列转换为具有对的行
【发布时间】:2018-08-03 19:39:54
【问题描述】:

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

如上图所示,一张表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 本身工作。

【问题讨论】:

  • 可以在 MySQL 中处理这个,但这真的是一个演示的东西,我可能会从你的 PHP 脚本中处理它。

标签: mysql


【解决方案1】:

第 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 列,或者将正确答案的引用存储在单独的表中。

【讨论】:

  • 我已经修改了类似于您提到的架构,但我面临的问题是,如何将我的数据从旧表的行/列复制到新的答案表?
  • @Dr.AtulTiwari 您可以使用一系列 UNION。
猜你喜欢
  • 2020-09-30
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2013-10-01
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多