-1

我正在开发一个网站,该网站包含一个包含 12 列的表格,每行显示有关学生的各种信息。我正在尝试添加第 13 列,如果学生尚未参加考试,则显示PASS,FAIL或离开它。BLANK

在我的 MSSQL 数据库中,我有两个表。T1(学生)包含有关学生的各种信息,并有一个 keyId(主键),这是网站表用于按学生将行分组在一起的内容。学生完成考试后,会在同一张表中为他分配一个学号(如果不是NULL)。这个学号是第二个表中的主键,它有一个值PASSFAIL附加到它上面。

编辑:第二个表中的数据通过或失败通过网站插入到另一个选项卡上,教师输入学生编号并选择通过或失败。

Status 列的数据类型(通过或失败)为 enum(string) P & F。

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

if ($examStatus[$i][Status] == 'PASS')
    echo '<td width="80px"> PASS </td>';
elseif ($examStatus[$i][Status] == 'FAIL')
    echo '<td width="80px"> FAIL </td>';
else
    echo '<td width="80px"></td>';

?>

我一直在无休止地寻找解决方案,只是无法弄清楚为什么它没有在网站上正确显示(它看似随机地显示通过或失败,并且没有任何空白)。

4

3 回答 3

0

在您的 SQL 查询中,您可以在那里添加您的 13 列。就像是:

SELECT *, CASE WHEN EXAM_SCORE > 70.00 then 'PASS'
               WHEN EXAM_SCORE < 70.00 then 'FAIL'
               else ''
               END EXAM_SCORE as PassFail
FROM [Students] INNER JOIN [Exams] ON Exams.studentNo=Students.studentNo
于 2013-01-31T15:03:58.860 回答
0

编辑:我已经从上面复制了您的代码,并使用适当的功能添加了您需要的部分。(根据需要调整/编辑/重命名以正确工作/显示)。

这是另一个示例: 使用 PHP 创建动态表

您可以以此为例在 PHP 中创建动态表:

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
       print '<tr>'
      .'<td>' . $row['col1'] . '</td>'
      .'<td>' . $row['col2'] . '</td>'
      .'<td>' . $row['col3'] . '</td>'
      .'<td>' . $row['colx'] . '</td>'
      .'</tr>';
}

?>

所以它基本上是遍历你的查询结果。由于您要加入学生表,因此您将可以访问通过/失败数据。您可能不想使用“*”,而是列出您想要从每个表中获得的列。

现在,我不确定您的其余代码是否正确或您需要什么(即 FOR 循环),需要 WHILE 循环来创建表并输出数据。

于 2013-01-31T16:38:37.343 回答
0

如果您需要可变/动态的列数,您应该查看垂直表格布局

于 2013-01-31T16:48:36.017 回答