0

質問と回答の 2 つのテーブルがあります。

  • questions次のフィールドがあります: questionId、title、category、correctAnswerID、url
  • answers次のフィールドがあります: answerId、questionId、text

私はこの機能を持っています:

$result = query("SELECT * FROM questions INNER JOIN answers ON questions.questionId=answers.questionId");

質問を4回返し、毎回異なる答えを返します。質問の配列を含む配列が必要で、すべての質問には関連する回答の配列があります。

すべての質問には 4 つの可能な回答があり、すべての質問には正解 ID があります。

前もって感謝します。

4

1 に答える 1

1

MySQL はそのような多次元配列をネイティブに返すことはできません。レベル 1 が行でレベル 2 が列である 2 次元配列のみです。

結果セットを反復処理し、自分で配列を構築する必要があります。

PDO では、次のようにします。

try {
    $pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $pdo->query("SELECT * FROM questions INNER JOIN answers ON questions.questionId=answers.questionId");

    $result = array();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        foreach ($row as $column => $value) {
            if ($column != "answerId") {
                $result[$row["questionId"]][$column] = $value;
            }
        }
        $result[$row["questionId"]][$row["answerId"]] = $row["text"];
    }
}
catch (PDOException $e) {
    //Todo: Error Handling Here
}

これにより、次の結果が得られます(あなたの結果はおそらく異なるでしょう):

array (size=2)
  1 => 
    array (size=9)
      'questionId' => string '1' (length=1)
      'title' => string 'b' (length=1)
      'category' => string 'letters' (length=7)
      'correctAnswerID' => string '2' (length=1)
      'text' => string 'd' (length=1)
      1 => string 'a' (length=1)
      2 => string 'b' (length=1)
      3 => string 'c' (length=1)
      4 => string 'd' (length=1)
  2 => 
    array (size=9)
      'questionId' => string '2' (length=1)
      'title' => string 'd' (length=1)
      'category' => string 'letters' (length=7)
      'correctAnswerID' => string '8' (length=1)
      'text' => string 'd' (length=1)
      5 => string 'a' (length=1)
      6 => string 'b' (length=1)
      7 => string 'c' (length=1)
      8 => string 'd' (length=1)
于 2012-10-28T10:32:12.953 に答える