0

我有一个查询

mysql_select_db($database_auditing, $auditing);
$query_sections3 = sprintf("SELECT tblanswer.questionid AS answerqid,
                                tblanswer.answerid AS answerid, 
                                tblanswer.answer AS answer, 
                                tblquestion.questionid AS questionid, 
                                tblquestion.questiontext AS questiontext, 
                                tblquestion.questionid AS quesid, 
                                tblquestion.questiontypeid AS questiontype, 
                                tblquestion.sectionid AS sectionid, 
                                tblscore.score1 AS score1, 
                                tblscore.score2 AS score2, 
                                tblscore.score3 AS score3, 
                                tblscore.score3 AS score3, 
                                tblscore.score4 AS score4, 
                                tblhelptext.helptext AS help, 
                                tblsection.sectionname AS sectionname 
                            FROM tblanswer 
                            LEFT JOIN tblquestion ON tblanswer.questionid = tblquestion.questionid 
                            LEFT JOIN tblscore ON tblquestion.questionid = tblscore.questionid 
                            LEFT JOIN tblhelptext ON tblquestion.questionid = tblhelptext.questionid 
                            LEFT JOIN tblsection ON tblquestion.sectionid=tblsection.sectionid 
                            WHERE tblanswer.auditid=%s 
                            ORDER BY tblquestion.sectionid",  
                        GetSQLValueString($_SESSION['auditid'], "int"));

$sections3 = mysql_query($query_sections3, $auditing) or die(mysql_error());

$totalRows_sections3 = mysql_num_rows($sections3);

它从数据库中提取相关问题并构建与该站点相关的问卷。

每个问题都与某个部分相关。

所以我想要做的(并且失败得很惨)是让上面查询的结果出现在我用于调查问卷的手风琴的相关部分,而不必在每个 div 中使用嵌套查询(这导致我将给定结果输入数据库时​​出现问题)。

感谢所有为这篇文章做出贡献的人。

我已经设法让手风琴在它自己的选项卡中搜索每个问题,但我想要实现的是在同一个选项卡中获取所有相关问题。

这是手风琴代码:

<?php $prevsub='';
$purpleronnie=0;
 while ($row_sections3=mysql_fetch_assoc($sections3)) {

     if ($row_sections3['sectionid'] !=$prevsub) {
         ?>

<div class="AccordionPanel">
<div class="AccordionPanelTab"><?php echo $row_sections3['sectionname'];?></div>
<div class="AccordionPanelContent">

<br />
<h5>Please answer the questions below to the best of your ability. For help, hover over the help icon, help text will appear in the box to the right of the screen.</h5>
<?php }?>

<table class="table2" align="center">
<tr>

<th><?php echo $row_sections3['questiontext'];?> <input type="hidden" name="qnumber[]" value="<?php echo $row_sections3['questionid'];?>" />
</th>
<td>
<input type="text" name="answerid[<?php echo $purpleronnie;?>]" value="<?php echo  $row_sections3['answerid'];?>" size="1" />

<?php if ($row_sections3['questiontype']=="1") { ?> 
<input type="text" size="25" name="answer[<?php echo $purpleronnie;?>]" value="<?php echo $row_sections3['answer'];?>" />

<?php } ?>

</table>    

</div>
</div>
<?php $purpleronnie++;
 if ($prevsub!=''&&$prevsub!=$row_sections3['sectionid'])
 $prevsub=$row_sections3['sectionid']; }?>

有关如何更改上述内容以使手风琴 div 在每次部分 id 增加时更改的任何建议,而不是针对每个问题?

非常感谢戴夫

4

1 回答 1

0

如果您能够按部分 id 对内容进行排序,那么您可以先构建一个由 section_id 划分的数据数组,然后您将遍历该数据并构建您的 div 等。下面的代码基于您的示例代码并且可能不是最优雅的,但它会做你想做的事,假设数据进来。如果这不是你所需要的 100%,它至少会给你一个开始的地方。另外,请注意结束标签。您错过了在发布的示例代码中关闭表格列和行。

$purpleronnie=0;
$data = array();

// sort your questions into "buckets" first
while ($row_sections3=mysql_fetch_assoc($sections3)) {
    // store that row of data in the correct sectioned off container
    $data[$row_sections3['sectionid']][] = $row_sections3;
}

// do nothing if we have no data! 
if(empty($data)) exit('woops! no results in this section!');

// now loop through these results and build your divs
echo '<div class="AccordionPanel">';

foreach($data as $sectionid => $rows){
    // grab the section name of the first row to use for the main section tabs
    $section_name = $rows[0]['sectionname'];
    echo 
        '<div class="AccordionPanelTab">'.$section_name.'</div>
         <div class="AccordionPanelContent">
            <br />
            <h5>Please answer the questions below to the best of your ability. 
                For help,hover over the help icon, help text will appear in the 
                box to the right of the screen.</h5>
            <table class="table2" align="center">';

    // now just loop through the rows in this section and fill in the stuff
    foreach($rows as $row){
      echo 
          '<tr>
               <th>'.$row['questiontext'].'
                   <input type="hidden" name="qnumber[]"
                          value="'.$row['questionid'].'"/>
               </th>
               <td>
                   <input type="text" name="answerid['.$purpleronnie.']" 
                          value="'.$row['answerid'].'" size="1" />';

        // do your conditional here
        if($row['questiontype']=="1") {
            echo '<input type="text" size="25" name="answer['.$purpleronnie.']" 
                         value="'.$row['answer'].'" />';
        }

        // make sure you close your rows!
        echo '</td></tr>';
    } // end foreach row of questions

    // close of question table and accordion panel content
    echo '</table></div>';

    // increment your counter thing
    ++$purpleronnie; 
}// end foreach sectionid

// close the accordian panel container
echo '</div>';
于 2012-06-18T12:19:26.380 回答