2016-10-23 45 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