2016-10-23 46 views
0

我想顯示順序問題和答案(第一:問題然後回答)它怎麼可能?Php pdo迭代序列

$servername = "localhost"; 
$username = "someone"; 
$password = "someonepassword"; 
$dbname = "quiz_app"; 

$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 

$statement = $pdo->prepare("SELECT * FROM question"); 
$statement2 = $pdo->prepare("SELECT a.id as answer_id, a.*, 
            q.id as question_id, q.* 
          FROM answer a 
           inner join question q on a.question_id = q.id"); 


$statement->execute(); 
$statement2->execute(); 


$result = $statement->fetchAll(PDO::FETCH_ASSOC); 
$result2 = $statement2->fetchAll(PDO::FETCH_ASSOC); 

$i=0; 
foreach ($result as $row) { 
    $i++; 
    echo "<h5>".$i.'.'.$row['question_text']. "</h5>"; 
    foreach ($result2 as $row2) { 
     echo "<input name='group". $row2['id'] ."' type='radio' id='". $row2['answer_id'] ."' />" . "<label for='". $row2['answer_id'] ."'>".$row2['answer_text']."</label>"; 
    } 
    echo "<br>"; 
} 

在這段代碼中的問題和答案是有序的不同(所有問題一起,在他們之後回答)我該如何解決?

+0

so'ORDER BY col ASC | DESC'? –

+0

好吧,我明白了,但它將question_text乘以答案的數量 –

+0

請參閱下面的裏格斯的答案。 –

回答

1

從邏輯上思考你正在處理的數據。第一個查詢是完全不必要的,您需要的所有內容都在第二個查詢中。公正的秩序,通過q.ida.id

$stmt = $pdo->prepare("SELECT q.*,q.id as qid, 
           a.*, a.id as aid 
         FROM question q 
          inner join answer a on a.question_id = q.id 
         ORDER BY qid, aid"); 

$q_and_a = $statement->fetchAll(PDO::FETCH_ASSOC); 

$last_qid = NULL; 
foreach ($q_and_a as $i => $row) { 
    if ($last_qid == $row['qid']) { 
     // we are starting a new question 
     echo "<h5>{$row['question_text']}</h5>"; 
     $last_qid = $row['qid']; 
    } 
    // hear we are processing all the answer to the question 
    echo "<input name='group{$row2['qid']}' type='radio' id='{$row['aid']}'/>" 
     . "<label for='{$row['aid']}'>{$row['answer_text']}</label>"; 
} 

不知道如果我有問題ID和回答在輸出正確的位置ID信息,但希望這會給你一個輕推在正確的方向和你可以解決任何問題,很少自己

+0

很高興看到綠色的勾號。我不確定OP的評論是否可能爲行添加一個計數,正如我在評論中所述。 –

+0

現在還有另一個答案...想知道OP是否會做「觸發器(綠色)滴答toc」哈哈,我只是不是「試試這個」的粉絲;-) –

0

試試這個:

<?php 

    $servername = "localhost"; 
    $username = "someone"; 
    $password = "someonepassword"; 
    $dbname  = "quiz_app"; 
    $pdo  = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 

    //$sql1  = " SELECT * FROM question ";     //<== UNNECESSARY QUERY 

    $sql2  = " SELECT a.id AS answer_id, a.*, "; 
    $sql2  .= " q.id AS question_id, q.* "; 
    $sql2  .= " FROM answer a "; 
    $sql2  .= " INNER JOIN question q on a.question_id = q.id "; 

    //$statement = $pdo->prepare($sql1);      //<== UNNECESSARY CODE 
    $statement2 = $pdo->prepare($sql2); 


    //$statement->execute();         //<== UNNECESSARY CODE 
    $statement2->execute(); 


    //$result  = $statement->fetchAll(PDO::FETCH_ASSOC);  //<== UNNECESSARY CODE 
    $result2 = $statement2->fetchAll(PDO::FETCH_ASSOC); 
    //$i   = 0;           //<== USE THE INDEX OF THE $result2 ARRAY 

    $output  = "";           //<== BUILD YOUR OUTPUT IN A VARIABLE 
    $questions = "";           //<== AN ARRAY OF QUESTIONS. 
    foreach ($result2 as $intDex=>$row) { 
     $question = $row['question_text']; 
     if(!in_array($question, $questions)){    
      $questions[] = $question; 
      $output  .= "<h5>".$i.'.'.$row['question_text']. "</h5>"; 
      $output  .= "<input name='group". $row2['id'] ."' type='radio' id='". $row2['answer_id'] ."' />"; 
      $output  .= "<label for='". $row2['answer_id'] ."'>".$row2['answer_text']."</label><br>"; 
      $output  .= "<br>"; 
     }else{ 
      $output  .= "<input name='group". $row2['id'] ."' type='radio' id='". $row2['answer_id'] ."' />"; 
      $output  .= "<label for='". $row2['answer_id'] ."'>".$row2['answer_text']."</label>"; 
      $output  .= "<br>";    
     } 

    } 
    echo $output; 
+0

你有點晚了。 OP已經接受了答案;-) –

+0

@ Fred-ii- :-(遲到肯定有價格;-) – Poiz

+0

Naa更好的答案比最快的槍在西方的答案。如果它好,它將會得到紫外線 – RiggsFolly