【问题标题】:Mysql Randomise Rows for Quiz用于测验的 Mysql 随机化行
【发布时间】:2014-04-07 07:52:52
【问题描述】:

我的表结构如下:

Id 问题 Answer1 Answer2 Answer3 Answer4

Answer1 始终是正确答案,因此我希望能够使用 PHP 以随机顺序显示四个答案。

这怎么可能?

【问题讨论】:

  • 这有点超出你的问题,但我认为你的表结构有点问题。我会有一张有问题的桌子,一张有答案的桌子。然后,您可以根据需要为每个问题提供尽可能多的答案,并且可以更轻松地打乱您的答案。
  • 按照我的系统创建方式,每个问题只有 4 个答案,不多也不少。

标签: php mysql


【解决方案1】:

你可以像这样使用 php shuffle 函数来做到这一点:

首先你创建一个答案数组$answers,然后你随机播放这个数组shuffle($answers);

   $query=mysqli_query($db_conn, "SELECT Question, Answer1, Answer2, Answer3, Answer4 FROM questions_table WHERE id=1");

   $array=mysqli_fetch_assoc($query);
   $question=$array['Question'];
   $answers=array($array['Answer1'], $array['Answer2'], $array['Answer3'], $array['Answer4']);
   shuffle($answers);

【讨论】:

    【解决方案2】:

    将答案放入数组,然后使用:shuffle 随机排列数组

    【讨论】:

      【解决方案3】:

      我建议将结果放入数组中,然后使用以下代码将它们打乱(如果您使用准备好的语句,最好使用它们):

      $SQL = $db -> prepare("SELECT * FROM table WHERE id = :id");
      $SQL -> execute(array(':id' => $id));
      
      $results = $SQL -> fetch();
      $question = $results['question'];
      
      $answers = array($results['answer1'],$results['answer2'],$results['answer3'],$results['answer4'];
      
      shuffle($answers);
      

      【讨论】:

        【解决方案4】:

        您的表结构将使数据库的管理成为未来的一个大问题。
        使用您目前的设计,通常选择您的问题,然后将答案放入一个数组中,然后 shuffle($answers) 将随机排列答案。
        正确的解决方案将标准化您的数据库,将 answers 与 @ 分开987654323@。使用 question_id 将问题链接到他们的答案。它将使您的数据库设计非常灵活,管理也将轻松很多。

        【讨论】:

        • 请再次阅读问题。他不想洗牌,但答案和答案在最后4列
        【解决方案5】:

        您将无法使用 MYSQL 执行此操作,因为答案都在同一行中。作为 ThePixelPony,您应该在 PHP 中使用 shuffle 函数

        【讨论】:

          猜你喜欢
          • 2015-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多