如何从此脚本中获得1个问题和4个答案?

时间:2019-03-27 14:02:17

标签: php mysqli

我正在Unity上创建一个webGL游戏,但想先使我的php正确。

我有2张桌子的问题和答案。每个问题都有4个潜在答案,需要从我的数据库中提取。 答案表通过questionId与问题表匹配。

问题:

  • 我应该更好地使用表联接还是应该将它们分开?
  • 我应该仅对问题表使用select语句,然后 加入表格以获得答案并分别提交?
  • 我应该创建吗 答案表有4列,表示不同的答案?

当前代码:

<?php

$query = ("select questiontable.questionId, questiontable.question, answertable.answerId,answertable.answer, answertable.questionId, questiontable.scoreValue
  FROM questiontable 
  inner join answertable on questiontable.questionId=answertable.questionId   ORDER BY RAND () LIMIT 1 ");
$result =mysqli_query($conn, $query) or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($result)){
  $row_cnt = mysqli_num_rows($result);
  echo $row_cnt;    
  echo $row ['question'];
  echo $row ['answer'] ;
  echo $row ['answer'] ;
  echo $row ['answer'];
  echo $row ['answer'];
}
?>

这是我的桌子:

CREATE TABLE `braingain`.`questionTable`
 ( `questionId` INT NOT NULL AUTO_INCREMENT , `question` VARCHAR(600) NOT NULL , `scoreValue` INT NOT NULL , `subject` VARCHAR(50) NOT NULL , PRIMARY KEY (`questionId`));

CREATE TABLE `braingain`.`answerTable`
 ( `answerId` INT NOT NULL  , `answer` VARCHAR(600) NOT NULL , 'questionId', isCorrect;

查询应将问题和4个相关的答案拉到一个数组中。

所需结果

创建的数组应如下所示:

|         question               | answerA | answerB | answerC | answerD |
| WHICH IS THE CORRECT SPELLING? | APPLE   | APEL    | APPUL   | APPAL   |

3 个答案:

答案 0 :(得分:1)

运行两个嵌套查询,

$output = array();
$answer_array = array('answerA','answerB','answerC','answerD');
$query = ("select * from questiontable ORDER BY RAND () LIMIT 1 ");
$result =mysqli_query($conn, $query) or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($result)){
    $row_cnt = mysqli_num_rows($result);
    $output['question']=$row['question'];
    $query2 = ("select * from answerTable where questionId = ". $row ['questionId'] order by answerId);
    $result2 =mysqli_query($conn, $query2) or die(mysqli_error($conn));
    $i=0;
    while ($row2 = mysqli_fetch_assoc($result2)){
        $output[answer_array[$i]]=$row2['answer'];
        $i++;
    }
}
print_r($output);
?>

答案 1 :(得分:0)

请查看缩进,使代码更加有趣:)

<?php
$query = ("
    SELECT
        questiontable.questionId,
        questiontable.question,
        answertable.answerId,
        answertable.answer,
        answertable.questionId,
        questiontable.scoreValue
    FROM
        questiontable 
    INNER JOIN
        answertable on questiontable.questionId = answertable.questionId
    ORDER BY RAND()
    LIMIT 1
");

$result = mysqli_query($conn, $query) or die(mysqli_error($conn));
$data = [];
$data[] = null;

$keys = [
    'question',
    'answerA',
    'answerB',
    'answerC',
    'answerD',
];

$return = [];
while ($row = mysqli_fetch_assoc($result)){
    if ($data[0] !== $row['question']) {
        $data = [];
        $data[] = $row['question'];
    }

    $data[] = $row['answer'];

    if (count($data) === 5) {
        $dataAssociative = array_combine($keys, $data);
        $return[] = $dataAssociative;
    }
}

var_dump($return);
?>

答案 2 :(得分:0)

好的,所以我所有的工作都在我的php等中。我希望它在代码中回显结果……

 <?php
    session_start();
    include 'dbconnect.php';

    $output = array();

    $answer_array = array('answerA','answerB','answerC','answerD'); //loads answers into array

    $query = ("select * from questiontable ORDER BY RAND () LIMIT 1 ");//sql query to get questions
    $result =mysqli_query($conn, $query) or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($result)){
        $row_cnt = mysqli_num_rows($result);
        $output['question']=$row['question'];
        $query2 = ("select * from answerTable where questionId = '". ($row ['questionId'])."' order by rand()");//sql query to get answers for questions by questionId 
        $result2 =mysqli_query($conn, $query2) or die(mysqli_error($conn));
        $i=0;
        $question=$row ['question'];
        while ($row2 = mysqli_fetch_assoc($result2)){
        $output[$answer_array[$i]]=$row2['answer'];
        $i++;
        $_POST = $output;
        }
                                          }
echo "</br> ";                                    
echo $_POST ['question'];
echo "</br> ";
echo $_POST['answerA'];
echo "</br>";
echo $_POST['answerB'];
echo "</br>";
echo $_POST['answerC'];
echo "</br> ";
echo $_POST['answerD'];
?>

现在我需要将结果统一存储,以便可以将其分配给按钮等。 我有它拉细节,但不确定如何将$_POST['answerA];分配给c#中的变量。 这是我的C#代码...

public class qNaDisplay : MonoBehaviour {
public Text questionDisplayText, answerAText, answerBText, answerCText, answerDText;
public Text questMessage, answerMessage;

private string question, a, b, c, d;


// Use this for initialization
void Start ()
{
    WWW questionURL = new WWW("http://localhost:8080/Project/PHP/questionRequest.php");
    question = questionDisplayText.text;
    a = answerAText.text;
    b = answerBText.text;
    c = answerCText.text;
    d = answerDText.text;
    StartCoroutine(qNaget(questionURL));
}

// Update is called once per frame
void Update () {

}

私有IEnumerator qNaget(WWW URL)     {

    yield return  questionURL;
    Debug.Log(questionURL.text);
    if (questionURL.error != null)
    {
        print("There was an error getting the question " + questionURL.error);
    }
    else
    {
         Debug.Log (questionURL.text); // this is a GUIText that will display the scores in game.
    }
}

}