2012-11-05 79 views
0

我具有低于此查询:如何在HTML表格显示在不同行中的答案

SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionContent, GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, q.QuestionMarks 
FROM Session s 
INNER JOIN Question q ON s.SessionId = q.SessionId 
JOIN Answer an ON q.QuestionId = an.QuestionId 
AND an.SessionId = q.SessionId 
WHERE s.SessionName = "GHWSW1" AND q.QuestionId = 1 
GROUP BY an.SessionId, an.QuestionId 
ORDER BY q.QuestionId, an.Answer 

以上查询输出低于这个结果:

SessionId SessionName QuestionId QuestionContent   Answer QuestionMarks 
1   GHWSW1  1   Here are 2 answers  BD  5 

所以我包含在代码查询下方设置了一个HTML表:

$assessment = "GHWSW1"; 
$number = 1; 

$query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionContent, 
GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, q.QuestionMarks 
    FROM Session s 
    INNER JOIN Question q ON s.SessionId = q.SessionId 
    JOIN Answer an ON q.QuestionId = an.QuestionId AND an.SessionId = q.SessionId 
    WHERE s.SessionName = ? AND q.QuestionId = ? 
    GROUP BY an.SessionId, an.QuestionId 
    ORDER BY q.QuestionId, an.Answer 
    "; 

    // prepare query 
    $stmt=$mysqli->prepare($query); 
    // You only need to call bind_param once 
    $stmt->bind_param("si", $assessment, $number); 
    // execute query 
    $stmt->execute(); 


     // This will hold the search results 
    $searchQuestionId = array(); 
    $searchQuestionContent = array(); 
    $searchAnswer = array(); 
    $searchMarks = array(); 

    // Fetch the results into an array 

    // get result and assign variables (prefix with db) 
    $stmt->bind_result($dbSessionId, $dbSessionName, $dbQuestionId, $dbQuestionContent, $dbAnswer, $dbQuestionMarks); 
     while ($stmt->fetch()) { 
     $searchQuestionId[] = $dbQuestionId; 
     $searchQuestionContent[] = $dbQuestionContent; 
     $searchAnswer[] = $dbAnswer; 
     $searchMarks[] = $dbQuestionMarks; 
     } 

?>  

</head> 

<body> 



<form id="QandA" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
<?php 

echo "<table border='1' id='markstbl'> 
     <tr> 
     <th class='questionth'>Question No.</th> 
     <th class='questionth'>Question</th> 
     <th class='answerth'>Answer</th> 
     <th class='noofmarksth'>Total Marks</th> 
     </tr>\n"; 

      foreach ($searchQuestionContent as $key=>$question) { 

     echo '<tr class="questiontd">'.PHP_EOL; 
     echo '<td class="optiontypetd">'.htmlspecialchars($searchQuestionId[$key]).'</td>' . PHP_EOL; 
     echo '<td>'.htmlspecialchars($question).'</td>' . PHP_EOL; 
     echo '<td class="answertd">'.htmlspecialchars($searchAnswer[$key]).'</td>' ; 
     echo '<td class="noofmarkstd">'.htmlspecialchars($searchMarks[$key]).'</td>' . PHP_EOL; 
} 
     echo "</table>" . PHP_EOL; 

     ?> 

所以HTML表显示它是这样的:

QuestionId QuestionContent   Answer QuestionMarks 
1   Here are 2 answers  BD  5 

但我想它像这样在HTML表:

QuestionId QuestionContent   Answer QuestionMarks 
1   Here are 2 answers  B  5 
            D 

第二个答案D应该是在一个单独的行和其他行应该有一个行跨度。但是,这怎么能实现呢?

会话表:

SessionId (auto) SessionName 
1     AAA 

问表:

SessionId QuestionId (auto) QuestionContent 
1   1     What is 2+2? 

回答表:

AnswerId (auto) SessionId QuestionId Answer 
1    1   1   B 
2    1   1   D 
+0

你不能,因为你在查询做GROUP_CONCAT,你正在破坏你所需要的信息来表明需要一个新的行。你可以使用'
'作为分隔符。这会给你多行,但仍然只是一个单元格,节省你不得不计算rowspans。 –

+0

这就是我所说的:一个很好的格式化!而且,你的MySQL查询真棒! (对不起,我只在MySQL中有一些小知识) –

+0

@MarcB没关系,我弄明白了。需要摆脱GROUP CLAUSE,然后在foreach循环中包含一些代码,以便它将显示行中需要空白的空白信息。 – user1794342

回答

1

试试这个

 foreach ($searchQuestionContent as $key=>$question) { 

    echo '<tr class="questiontd">'.PHP_EOL; 
    echo '<td class="optiontypetd">'.htmlspecialchars($searchQuestionId[$key]).'</td>' . PHP_EOL; 
    echo '<td>'.htmlspecialchars($question).'</td>' . PHP_EOL; 
    echo '<td class="answertd">'.htmlspecialchars($searchAnswer[$key]).'</td>' ; 
    echo '<td class="noofmarkstd">'.htmlspecialchars($searchMarks[$key]).'</td>' . PHP_EOL; 
    echo '</tr>'; 
} 

您忘记关闭tr标签

+0

我实际上只是想出了它。我必须摆脱一个group by子句并在foreach循环中添加一些东西。我将回答要显示的问题。但是如果你能告诉我如何跨行,如果它们是空的,我会给你最好的答案。我会提供我的答案,以便您可以看到代码。这里是一个链接,显示表格的样子[链接](http://helios.hud.ac.uk/u0867587/Mobile_app/individualmarks.php) – user1794342

+0

我发布了我的答案,看看答案和链接我在评论 – user1794342

+0

中提供了你的链接被破坏,你的意思是,你想要显示一行,即使它是空的? –

0

删除GROUP BY子句,并添加使foreach循环是这样的:

echo "<table border='1' id='markstbl'> 
     <tr> 
     <th class='questionth'>Question No.</th> 
     <th class='questionth'>Question</th> 
     <th class='answerth'>Answer</th> 
     <th class='answermarksth'>Marks per Answer</th> 
     <th class='noofmarksth'>Total Marks</th> 
     </tr>\n"; 
       $previous_question_id = null; 
      foreach ($searchQuestionContent as $key=>$question) { 
      if ($previous_question_id == $searchQuestionId[$key]) { 
      $searchQuestionId[$key] = ''; 
      $question = ''; 
      $searchMarks[$key] = ''; 
     }else{ 
      $previous_question_id = $searchQuestionId[$key]; 
     } 
     echo '<tr class="questiontd">'.PHP_EOL; 
     echo '<td class="optiontypetd">'.htmlspecialchars($searchQuestionId[$key]).'</td>' . PHP_EOL; 
     echo '<td>'.htmlspecialchars($question).'</td>' . PHP_EOL; 
     echo '<td class="answertd">'; 
     echo $searchAnswer[$key]; 
     echo '</td>' ; 
     echo '<td class="answermarkstd"><input class="individualMarks" name="answerMarks[]" id="individualtext" type="text" "/></td>' . PHP_EOL; 
     echo '<td class="noofmarkstd">'.htmlspecialchars($searchMarks[$key]).'</td>' . PHP_EOL; 
}  
     echo '</tr>'; 
     echo "</table>" . PHP_EOL; 
相关问题