在PHP查询中随机播放MySQL行

时间:2014-06-20 07:06:57

标签: php mysql sql

我在PHP中这样做:

function populateQuestions(){
     global $dbc;
     $query = "SELECT * FROM Questions";

     $result = $dbc->getAll($query);
     shuffle($result);
     return $result;
}

以上代码段会改变用户看到的问题,因此每次都会看到随机问题。

但是我的SQL表有answerA,answerB,answerC,answerD作为可能的答案字段。 answerA总是正确的。

我想在json_decode之前将这4个字段改组。

所以answerA可能是答案B,答案C可能是答案A等等......

这可能吗?

  

表格问题的表结构:

     

ID - 姓名 - 图片 - 答案A - 答案B - 答案C - 答案D - 类别

3 个答案:

答案 0 :(得分:2)

尝试:

SELECT id, answer FROM(
    SELECT id, answerA as answer FROM Question UNION ALL
    SELECT id, answerB FROM Question UNION ALL
    SELECT id, answerC FROM Question UNION ALL
    SELECT id, answerD FROM Question)
ORDER BY id, RAND();

答案 1 :(得分:0)

当您显示数据时,只需取出一个数组并根据该数组打印问题:

$answerOrder = shuffle(array('answerA', 'answerB', 'answerC', 'answerD'));
foreach($answerOrder as $columnName) {
    echo $questions[$currentId][$columnName]
}

假设$ questions数组是populateQuestions()的返回值,并且你迭代它。在迭代中,$ currentId是来自$ questions数组的key

$ questions [$ currentId]包含db中的一行。

使用此解决方案,您不会在数据库中添加额外内容,并且可以在显示时跟踪正确的答案位置。

答案 2 :(得分:0)

这只是解释问题的简单方法。

<?php
    function populateQuestions(){
        //global $dbc;
        //$query = "SELECT * FROM Questions";
        // I'm assuming that your array from the database looks like the one represented by $result.
        $result = array(array('ID'=>'1', 'name'=>'Question One', 'image'=>'1.jpg', 'answerA'=>'ans1', 'answerB'=>'ans2', 'answerC'=>'ans3', 'answerD'=>'ans4', 'category'=>'quiz'), array('ID'=>'2', 'name'=>'Question Two', 'image'=>'2.jpg', 'answerA'=>'ans5', 'answerB'=>'ans6', 'answerC'=>'ans7', 'answerD'=>'ans8', 'category'=>'quiz')); /// sample database results array
        $temporaryArray = array();
        foreach($result as $key=>$value){
            $letters = range('A', 'D');
            shuffle($letters);
            $temporaryArray[$key]['answer'.$letters[0]] = $value['answerA'];
            $temporaryArray[$key]['answer'.$letters[1]] = $value['answerB'];
            $temporaryArray[$key]['answer'.$letters[2]] = $value['answerC'];
            $temporaryArray[$key]['answer'.$letters[3]] = $value['answerD'];
        }
        shuffle($temporaryArray);
        return $temporaryArray;
    }
?>